zmc 发表于 2023-12-13 11:58:09

新手读txt老报错,求助

Program fcode_cn
Implicit None
Integer, Parameter :: NROW = 3, NCOL = 4
Integer :: b(NROW, NCOL), i, j
Open(10, File="E:\xxxx.txt")
Do i = 1, NROW
   Do j = 1, NCOL
      Read(10, *) b(i, j)
   End Do
End Do
Close(10)
End Program fcode_cn

fcode 发表于 2023-12-13 20:38:45

有格式顺序读取,表控格式 read(??,*) 的读取单位是行。
内部实现是这样的:

读取一整行,分配到read后面的变量列表。
如果该行内数据超过变量列表,则多余的部分被丢弃。
如果该行内数据不足,则继续读取下一个整行,重复上述过程。直到总的变量数量达到变量列表的要求为止。

所以,每次read至少会读一行,你写成 3*4 的二重循环,要求文件中至少12行。
改成单层循环。
Do i = 1, NROW
    Read(10, *) b(i, :)
End Do
甚至你可以不用循环
Read(10, *) b
就行了。但最好b定义为b(NCOL,NROW)

Program fcode_cn
Implicit None
Integer, Parameter :: NROW = 3, NCOL = 4
Integer :: b(NROW, NCOL), i, j
Open(10, File="E:\xxxx.txt")
Do i = 1, NROW
    Read(10, *) b(i, :)
End Do
Close(10)
End Program fcode_cn

页: [1]
查看完整版本: 新手读txt老报错,求助