发生的情况是,您将整行读取为“gasName”并测试整行以查看它是否等同于“gasNameIn”。如果数据按照您在样本中的方式排列,它将永远不会相同,因此您将在获得匹配之前到达文件的末尾。自从我用 Fortran 编写以来已经有一段时间了,但是在第一个循环中,“gasName”将是未定义的。通常这在编程中是不可以的。
在我输入之前得到的答案是解决您的问题的方法。搏一搏。如果您仍然遇到问题,也许我会启动一个 Fortran 编译器并再次尝试使用 Fortran。(自 90 年代初以来,我已经做过任何事情了。)
干杯!
你好,这里是你的代码修改了一下,你可以推销你不需要的东西。我只是添加了几行来使其成为一个独立的程序。例如,有一条语句将值“steam”分配给“gasNameIn”。我想你提到你会让用户为此输入一个值。我还添加了一个“写”语句来表明您的程序已正确读取这些值。这是一种粗略的“单元测试”。否则,我只解决了您的问题所涉及的程序部分。看一下这个:
character (len=5) :: gasName, gasNameIn
gasNameIn = "steam"
open (unit = 25, file = "gasvalues.txt")
do while (gasName .NE. gasNameIn)
read (25, *) gasName
if (gasName .EQ. gasNameIn) then
backspace (25)
read (25,*) gasName, A1, A2
write (*, *) "The gas is: ", gasName, ". The factors are A1: ", A1, "; A2: ", A2
endif
end do
close (25)
end
好的,这里有一些注释可以帮助澄清我所做的事情。我尽量保持您的代码完整无缺。在您的程序中,我的 fortran 95 编译器抱怨了一些事情,即:“if”测试中需要“then”,而“enddo”需要是“end do”。我认为这些是我遇到的主要编译器问题。
就您的代码而言,当您的程序测试“gasName”与“gasNameIn”相同时,您希望再次“备份”到该记录,以便您可以重新读取该行。可能有更好的方法来做到这一点,但我试图让你的程序想法保持你想要的方式。哦,是的,还有一件事,我将输入文件命名为“gasvalues.txt”。
我希望这会有所帮助。干杯!