【发布时间】:2017-11-16 18:01:49
【问题描述】:
我正在编写一个 Fortran 应用程序,我遇到了这个问题。当我定义一个名单如下:
CHARACTER(100) :: INPUT_DIR, OUTPUT_DIR, ROOT_DIR
NAMELIST /IODIR/ INPUT_DIR, OUTPUT_DIR
然后我从文件中读取IODIR:
READ(FUNIT,IODIR, ERR=99)
文件中的数据是:
&IODIR INPUT_DIR="Input", OUTPUT_DIR="Output" /
但是会报错
“文件结束”。
变量的长度似乎比文件中定义的要长。我不知道如何为字符变量设置分隔符,或者在名单中读取未知字符。我使用GNU Fortran 构建。
【问题讨论】:
-
您确定是 read 导致了错误吗?看起来没问题,即使出现问题,您也不会收到错误消息,而是会分支到标签 99。
-
@agentp
err=仅用于在错误条件下进行分支。 -
@francescalus 对。我已经很久没有使用它们了。我认为
err也会捕获 EOF(毕竟这是一个错误)。在任何情况下基于测试(intel&gnu),即使行尾没有换行符,显示的代码也不会产生文件结束错误。 -
尝试读取超出文件末尾的内容会触发文件结尾条件@agentp,而不是错误条件。
-
我发现,当程序读取文件中的最后一个名单时,它到达了文件的末尾。如果我们在 EOF 中再添加一行(可以是空行),程序将通过。非常感谢!
标签: fortran character end-of-life