【发布时间】:2021-09-21 18:38:51
【问题描述】:
我有一个 Fortran 可执行文件,它在进行计算之前需要几个键盘输入。它在输入输入的终端中工作,但我想使用管道输入输入(Windows 10 命令行)。当我只有一个键盘输入时,管道可以完美运行。如何让它与多个输入一起工作?
我几乎可以根据这里的类似问题让它工作:Passing arguments to interactive fortran program。我查看了有关标准输入的文档,但仍然无法弄清楚。
这是一个只有一个输入的示例 Fortran 程序,它与管道一起使用。
program foo
integer n
character*80 c
write (*,*) 'Enter 1,2,3 for cat,dog,fish'
read (*,*) n
if (n .eq. 1) then
write (*,*) 'meow'
elseif (n .eq. 2) then
write (*,*) 'woof'
elseif (n .eq. 3) then
write (*,*) 'blurp'
else
write (*,*) 'error1'
endif
C write (*,*) 'Enter y,n for yay,nay'
C read (*,*) c
C if (c == 'y') then
C write (*,*) 'yes'
C elseif (c == 'n') then
C write (*,*) 'no'
C elseif (n .eq. 3) then
C else
C write (*,*) 'error2'
C endif
end
终端测试:
C:\my\file\path> C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
2
woof
C:\my\file\path> echo 1 | C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
meow
这是一个带有多个输入的示例 Fortran 程序,它不适用于管道。
与上面相同的程序,但注释行没有注释。终端测试:
C:\my\file\path> C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
3
blurp
Enter y,n for yay,nay
n
no
C:\my\file\path> echo 1 y | C:\my\file\path\foo.exe
Enter 1,2,3 for cat,dog,fish
meow
Enter y,n for yay,nay
At line 18 of file C:/my/file/path/foo.f (unit = 5, file = 'stdin')
Fortran runtime error: End of file
Error termination. Backtrace:
Could not print backtrace: libbacktrace could not find executable to open
#0 0x318dd91b
#1 0x318d6b34
#2 0x318d355b
#3 0x318d7f6c
#4 0x318e8e9d
#5 0x318d88df
#6 0x318d5190
#7 0x318b1691
#8 0x318f3f93
#9 0x318b13c0
#10 0x318b14f5
#11 0xb9677c23
#12 0xba24d4d0
#13 0xffffffff
编译器信息: GNU gfortran,CMake 基于wiki example
【问题讨论】:
-
这个问题的答案取决于程序是如何工作的。如果它没有命令行参数或不采用标准输入,那么它就不能作为“单线”工作。可能有一些“记录和回放”程序可以工作。这个问题与源代码无关,因此对于 SO 来说是题外话。请查阅您的 foo.exe 用户文档。
-
对于所有 Fortran 问题,请使用 fortran 标签。 Fortran 90 只是该标准的一个非常古老的修订版。
标签: windows cmd fortran pipe gfortran