Как было отмечено в другом ответе здесь и в других местах, вывод Fortran имел концепцию управления кареткой. Для принтеров, которые использовали управление кареткой, первый символ был пробелом, что было необходимо для начала новой строки.
Fortran сам удалил концепцию управления кареткой в Fortran 2003, но для полноты картины мы можем видеть, что Fortran по-прежнему требует, чтобы вывод, ориентированный на список, имел (в большинстве случаев) это (по умолчанию) начальный пробел (Fortran 2018, 13.10.4 p.13):
За исключением новых записей, созданных явным форматированием в рамках определенной процедуры вывода или продолжением последовательностей символов с разделителями, каждая выходная запись начинается с пустого символа.
Форматирование списка имен имеет аналогичный оператор.
Вы можете избежать этого начального пробела, избегая использования вывода, ориентированного на список:
print '(A)', '<-- No space here'
end
Обратите внимание, что здесь виноват не print
, а вывод, ориентированный на список. Аналогичное мы видим с write
:
write (*,*) '<-- Space from the list-directed output'
end
Наконец, если мы используем внутренние файлы, мы все равно получим начальный пробел с выводом, ориентированным на список:
character(len=20) :: internal
write (internal, *) '<-- Leading blank here'
end
(Если мы затем выведем этот внутренний файл со списком, мы увидим два начальных пробела.)
person
francescalus
schedule
01.02.2021
write(*,"(A)")"a space, really?"
- person ev-br   schedule 17.05.2012