在Fortran 90/95中格式化

时间:2011-06-02 02:47:15

标签: format fortran fortran90 fortran95

我正在学习Fortran 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中未使用的遗留功能吗?是打印到控制台的特定行为吗?我想知道何时(如果有的话)我需要在写入时在format语句中声明一个特殊的第一个字符。

我的编译器是Force 2.0.9,我认为它基于gfortran。我在Windows 7上运行它,控制台是PowerShell。

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

这是在70年代甚至80年代使用FORTRAN 77及更早版本的行式打印机......但你最近什么时候看到行式打印机?任何教授此功能的Fortran 90/95书都应该被丢弃。

Stack Overflow上已经回答了这个问题:Are Fortran control characters (carriage control) still implemented in compilers?

答案 1 :(得分:2)

这仅适用于旧的“固定格式”Fortran(77及更早版本),而不适用于新的“自由格式”Fortran(90及更高版本),此时所有命令都必须缩进6个空格。您仍然可以使用带有适当编译器标志的fixed-form。如果扩展名为.f而不是.f90,有时甚至是默认值。

答案 2 :(得分:1)

Fortran 90/95对我来说太了,但我不记得七十年代使用FORTRAN的那些格式化选项。

尽管如此,我认为这是一项遗留功能,而且你有'+'覆盖一条线的事实表明这些选项用于输出到行式打印机而不是控制台屏幕。

答案 3 :(得分:1)

我正在学习Fortran 90/95,我正在使用的书讨论了行式打印机对格式声明的影响。根据该书,该程序使用该行的第一个字符来决定该行相对于前一行的位置(即'1'开始一个新页面,'0'跳过一行,'+'覆盖前一行,并且''或任何其他字符将新行写在上一行下面)。我在控制台中编译并运行了一个简单的程序来测试它,但没有观察到这种行为。

这是Fortran的遗留功能之一,今天大多被忽略,因为(如果没有别的话)不能直接打印到打印机。在任何情况下,大多数编译器(我现在真的不能说gfortran,因为我没有安装它)有选项可以忽略这种行为,并且其中一些默认情况下会忽略第一列。根据你的表现,假设你是其中之一是合理的,所以是的,你可以忽略它。

出于对这种做法的习惯,很多fortran程序员在write语句中以空白或1x开始任何字符串。

相关问题