Fortran中READ的含义

kar*_*grz 11 fortran

READ()在Fortran做什么?

例如:

READ(1,82)
Run Code Online (Sandbox Code Playgroud)

Ste*_*ini 16

1是文件句柄,您必须使用正确的打开调用打开它.82是引用格式的标签,表示如何根据可视格式报告数据.

        program foo
        implicit none
        integer :: i
        double precision :: a

        write (*,*) 'give me an integer and a float'
        read (*,82) i,a
        write (*,82) i,a
82      format (I4, F8.3)
        end program
Run Code Online (Sandbox Code Playgroud)

在此示例中,程序接受标准输入(其单元号未指定,因此我将*)设置为整数和浮点值.格式说整数占据前四列,然后我有一个浮点数,它保持在8列,小数点后面有3位数

如果我现在运行该程序,并且我没有完全遵循这种格式,程序将抱怨并崩溃,因为前4列预计代表一个整数(由于I4格式)和"5 3".不是有效的整数

$ ./a.out 
 give me an integer and a float
5 3.5
At line 7 of file test.f (Unit 5)
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: Bad value during integer read
Run Code Online (Sandbox Code Playgroud)

但是,正确的规格(请注意数字5之前的三个空格)将执行正确的操作(稍微公差,不是那么严格)

$ ./a.out 
 give me an integer and a float
   5 3.5
   5   3.500
$ 
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 6

它根据标签82处的FORMAT语句从"单元"(打开的文件)编号1读取.但是由于该语句没有列出任何变量,因此它无法放置它正在读取的数据,这不太可能有所帮助; READ(1,82) FOOBAR将更有用的数据放在变量FOOBAR中.

  • IIRC,文件号5等同于stdin,文件号6等同于stdout。文件1可能是文件系统中的文件。我似乎记得这些数字是要映射到磁带机上的,但是那是很久以前的事情了。 (2认同)