如何修复Fortran运行时错误:列表输入中第0项的错误整数?
以下是生成运行时错误的Fortran程序。
CHARACTER CNFILE*(*)
REAL BOX
INTEGER CNUNIT
PARAMETER ( CNUNIT = 10 )
INTEGER NN
OPEN ( UNIT = CNUNIT, FILE = CNFILE, STATUS = 'OLD' )
READ ( CNUNIT,* ) NN, BOX
从gdb收到的错误消息是:
At line 688 of file MCNPT.f (unit = 10, file = 'LATTICE-256.txt')
Fortran runtime error: Bad integer for item 0 in list input
[Inferior 1 (process 3052) exited with code 02]
(gdb)
我不确定必须为READ()指定哪些选项才能读取文本文件中的数字。如果同一行中的两个数字在文本文件中指定为整数或实数,这是否重要?
下面是在公开调用中使用断点的程序的gdb执行
Breakpoint 1, readcn (
cnfile=<error reading variable: Cannot access memory at address 0x7fffffffdff0>,
box=-3.37898272e+33, _cnfile=30) at MCNPT.f:686
答案 0 :(得分:3)
由于您未在open语句中指定form="unformatted"
,因此将为格式化IO打开单元/文件。这适用于人类可读的文本文件。 (&#34;未格式化&#34;将用于计算机原生格式的非人类可读文件,有时称为&#34;二进制&#34;。)因此,您应该在读取或使用列表上提供格式-directed read,即read(unit, *)
。要建议特定格式,我们必须知道文件中数字的布局。可能的格式读取是:read (CNUINT, '(I4, 2X, F6.2)' ) NN, BOX
P.S。我在你的问题中回答了这个问题,而不是标题,这似乎是无关的。
编辑:现在您显示文本数据文件,列表导向的读取看起来更容易。那是因为数据不在列中排列。看来该文件在第一行有两个整数,然后在以下每行上有三个实数。您很可能需要为第一行读取不同的内容。您向我们展示的代码示例是否尝试读取第一行或后一行?如果第一行,读入两个整数变量似乎是合理的。如果是后一行,则变成两个或三个实变量。如果你想跳过第三行数据,那就是两个。
编辑2:问题已经多次改变,这非常令人困惑。在一个版本的问题中显示的文本文件的第一行包含整数,后面的行包含实数。由于列出定向的读取正在读取整数和浮动变量,如果您尝试在具有两个实际值的后续行上使用它,则会出现问题。