FORTRAN的read语句中END参数的用法
END=子句
Fortran程序设计(第四版)p518:该子句指定了一个可执行语句的标号。当检测到输入文件结束时,将跳转到该标号。END=子句提供了一个处理意外文件结束条件的方法。
书中简单描述了END语句的作用,以下用一个例子说明。
例如在linux系统的一个目录下有input和test.f90两个文件,input文件中的内容如下:
1 2
3 4
5 6
7 8
9 10
test.f90中的源代码如下:
PROGRAM end_test
IMPLICIT NONE
INTEGER::var1 ,var2open(30, "input")
do read(30, *, end =1000)var1,var2write(*,*)var1,var2
end do
1000 write(*,*)"END子句"END PROGRAM end_test
然后在终端中用gfortran或ifort等Fortran编译器进行编译,如
gfortran test.f90
此时该目录下生成一个a.out文件
在终端中输入:
./a.out
运行该可执行程序,此时输出结果:
1 2
3 4
5 6
7 8
9 10
END子句
从这个例子中可以看到,end子句只有在文件内容读取完后才会跳转执行。在这个do循环中,由于没有规定循环的次数,循环将一直运行。而read语句中的END参数给循环指定了一个跳出循环的条件,即文件读取完毕时,跳转到END子句:
1000 write(*,*)"END子句"
然后跳出DO循环。因此在这个例子中,DO循环过程中代码运行的顺序是:
read(30, *, end =1000)var1,var2write(*,*)var1,var2 !DO1read(30, *, end =1000)var1,var2write(*,*)var1,var2 !DO2read(30, *, end =1000)var1,var2write(*,*)var1,var2 !DO3read(30, *, end =1000)var1,var2write(*,*)var1,var2 !DO4read(30, *, end =1000)var1,var2write(*,*)var1,var2 !DO51000 write(*,*)"END子句" !此时imput文件中的内容读取完毕,检测到输入文件结束,代码跳转到end语句执行END PROGRAM end_test