gfortran:所有终端输出都转到 fort.6 而不是终端

问题描述 投票:0回答:2

我有一个程序,其中包含一些终端输出,如下所示:

write(*,*) 'Progress...'

当我从命令行或双击(我使用 Windows)运行它时,所有终端输出都会转到 fort.6 文件。 有什么方法可以输出到窗口吗

测试了一个短程序:

program testoutput
write(*,*) 'test1'
write(*,*) 'test2'
write(*,*) 'test3'
write(*,*) 'test4'
write(*,*) 'test5'
write(*,*) 'test6'
write(*,*) 'test7'
write(*,*) 'test8'
write(*,*) 'test9'
write(*,*) 'test10'
end program

它工作正常 - 我在终端中看到输出。 但另一个程序的工作方式不同。我不使用单元 6 进行输出。 另外我想这里不可能展示它,因为它真的很大。

fortran gfortran
2个回答
2
投票

如果没有示例,我们就只能求助于水晶球。请参阅 https://stackoverflow.com/help/mcve

无论如何,重现您所看到的内容的一种方法是

program fort6
  implicit none
  close(6)
  write(*,*) 'Progress...'
end program fort6

那么如何避免此类问题呢?我的经验法则是始终使用大于 10 的单位编号。或者如果您不需要保留与旧编译器的兼容性,则更好,使用

NEWUNIT=
说明符打开文件,而不是手动分配单位编号。


1
投票

如果您写入尚未与任何内容显式关联的单元,例如:

program test
    implicit none
    write (27, *) "Hello"
end program test

它将创建一个名为

fort.27
的文件并写入其中。

对于许多(但不是全部)编译器来说,单元 6 是标准输出。

对于这些编译器,并且只有那些,语句

write(*, *)
write(6, *)
将是相同的。因此,在这些编译器上,关闭单元 6 将导致
write(*, *)
形式的进一步输出发送到名为
fort.6
的文件。

我从您对另一个答案的评论中看到,您已经找到了一个可以执行这些操作的子例程。但我还是想把这个写成答案。

© www.soinside.com 2019 - 2024. All rights reserved.