- 积分
- 3449
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-4-25
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前编程的时候遇到一个看似简单,但是很容易出错的问题,个人认为归结起来就是Fortran中do循环的显式写法和隐式写法。当时问了周围的一些同学都不知道为什么。最近又在给别人讲一些东西,所以就想起了这个问题。请大神出来答疑解惑,感激不尽!!!下面举个简单的例子:在D盘下有一个名为test.txt的文本文件,存储的是3×3的数据,详细内容如下1 2 34 5 6
7 8 9
下面我就分别用显式循环和隐式编写程序读取这个文件中的数据,然后直接输出到屏幕。(编译环境:VS2010+IVF11)
第一:显式循环
program main
implicit none
integer,parameter::row=3,col=3
integer,dimension(row,col):: datas
integer i,j
open(1,file='D:\test.txt')
do i=1,row
do j=1,col
read(1,*) datas(i,j)
enddo
enddo
print*,datas
end
编写完成之后,编译、链接、运行,在点击运行之后,就弹出一个错误提示:
forrtl: severe (24): end-of-file during read, unit 1, file D:\test.txt
Image PC Routine Line Source
Console1.exe 003DEDDA Unknown Unknown Unknown
Console1.exe 003485AA Unknown Unknown Unknown
Console1.exe 003477AB Unknown Unknown Unknown
Console1.exe 0034BA28 Unknown Unknown Unknown
Console1.exe 0034122E _MAIN__ 10 Source1.f90
Console1.exe 003E6213 Unknown Unknown Unknown
Console1.exe 003914F9 Unknown Unknown Unknown
Console1.exe 003913BF Unknown Unknown Unknown
kernel32.dll 776AED5C Unknown Unknown Unknown
ntdll.dll 777A37EB Unknown Unknown Unknown
ntdll.dll 777A37BE Unknown Unknown Unknown
第二:第一种隐式循环
program main
implicit none
integer,parameter::row=3,col=3
integer,dimension(row,col):: datas
integer i,j
open(1,file='D:\test.txt')
do i=1,row
read(1,*) (datas(i,j),j=1,col)
enddo
print*,datas
end
第二种隐式循环
program main
implicit none
integer,parameter::row=3,col=3
integer,dimension(row,col):: datas
integer i,j
open(1,file='D:\test.txt')
read(1,*) ((datas(i,j),j=1,col),i=1,row)
print*,datas
end
上面两种隐式循环,编译、链接、运行都没有错误,能输出正确的结果。
|
|