1

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

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

谢谢您的帮助!

4

4 回答 4

3

这在 70 年代甚至 80 年代与 FORTRAN 77 及更早版本的行式打印机一起使用……但是您最后一次看到行式打印机是什么时候?任何教授此功能的 Fortran 90/95 书籍都应丢弃。

这已经在 Stack Overflow 上得到了回答:Fortran control characters (carriage control) 是否仍然在编译器中实现?

于 2011-06-02T03:16:02.923 回答
2

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

于 2012-09-04T09:29:55.533 回答
1

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

这是 Fortran 的遗留功能之一,今天大多被忽略,因为(如果没有别的)不直接打印到打印机。无论如何,大多数编译器(我现在真的不能专门针对 gfortran 说,因为我没有安装它)都有忽略该行为的选项,其中一些默认情况下会忽略第一列。从您所展示的内容来看,假设您是其中之一是合理的,所以是的,您可以忽略它。

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

于 2011-06-02T03:21:32.927 回答
1

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

尽管如此,我认为这是一个遗留功能,并且您有“+”来覆盖一行这一事实表明这些选项旨在输出到行式打印机而不是控制台屏幕。

于 2011-06-02T03:01:56.713 回答