Форматирование в Фортране 90/95 - PullRequest
1 голос
/ 02 июня 2011

Я изучаю Фортран 90/95, и в книге, которую я использую, обсуждалось влияние строчных принтеров на оператор формата.Согласно книге, программа использует первый символ строки, чтобы определить положение строки относительно предыдущей строки (то есть «1» запускает новую страницу, «0» пропускает строку, «+» перезаписывает предыдущую строку и'' или любой другой символ записывает новую строку ниже предыдущей строки).Я скомпилировал и запустил простую программу в консоли, чтобы проверить это, но не наблюдал такого поведения.

program test

integer :: i = 123
character(13) :: hello = 'Hello, World!'

100 format ('0','Count = ',I3)

write (*,*) hello
write (*,100) i

end program

Вывод

 Hello, World!
0Count = 123

, где я ожидал

 Hello, World!

Count = 123

Кто-нибудь знает, почему это так?Это устаревшая функция, которая не используется в Fortran 90/95?Это специфическое поведение для печати на консоль?Я хотел бы знать, когда (если когда-либо) мне нужно будет объявить специальный первый символ в выражении формата при записи.

Мой компилятор - Force 2.0.9, который, как я считаю, основан на gfortran.Я запускаю его на Windows 7, и консоль PowerShell.

Спасибо за помощь!

Ответы [ 4 ]

3 голосов
/ 02 июня 2011

Это использовалось в 70-х и даже 80-х годах с линейными принтерами в FORTRAN 77 и более ранних версиях ... но когда вы в последний раз видели линейный принтер? Любая книга Фортрана 90/95, которая учит этой особенности, должна быть выброшена.

На этот вопрос уже было получено ответ по поводу переполнения стека: Реализованы ли символы управления Fortran (управление кареткой) в компиляторах?

2 голосов
/ 04 сентября 2012

Это относится только к старому Фортрану "фиксированной формы" (77 и более ранние), но не к новому Фортрану "свободной формы" (90 и более поздние), когда все команды должны были иметь отступ с 6 пробелов.Вы все еще можете использовать фиксированную форму с соответствующими флагами компилятора.Иногда это даже по умолчанию, если расширение .f, а не .f90.

1 голос
/ 02 июня 2011

Я изучаю Фортран 90/95, и в книге, которую я использую, обсуждалось влияние строчных принтеров на оператор формата. Согласно книге, программа использует первый символ строки, чтобы определить положение строки относительно предыдущей строки (то есть «1» запускает новую страницу, «0» пропускает строку, «+» перезаписывает предыдущую строку и '' или любой другой символ записывает новую строку ниже предыдущей строки). Я скомпилировал и запустил простую программу в консоли, чтобы проверить это, но не наблюдал такого поведения.

Это одна из унаследованных функций Fortran, которая сегодня в основном игнорируется, поскольку (если не что иное) нельзя напрямую печатать на принтерах. В любом случае, большинство компиляторов (я действительно не могу сказать конкретно о gfortran сейчас, так как у меня его не установлено) имеют опции, чтобы игнорировать это поведение, и некоторые из них по умолчанию игнорируют первый столбец. Исходя из того, что вы показали, разумно предположить, что вы один из них, так что да, вы можете проигнорировать это.

По привычке в отношении этой практики многие программисты на фортране начинают любую строку с пробела или 1x в операторе записи.

1 голос
/ 02 июня 2011

Fortran 90/95 - много слишком недавно для меня, но я не помню, чтобы эти варианты форматирования использовались в 70-х годах с использованием FORTRAN.и тот факт, что у вас есть «+» для перезаписи строки, говорит о том, что опции предназначены для вывода на линейный принтер , а не на экран консоли.

...