Fortran和Eclipse:在控制台中显示文本
我在使用Fortran 90和Eclipse时遇到了一点小困难。我在Eclipse上安装了“Photran”插件,并成功地将所有内容都编译得非常完美,总体而言,程序完成了它必须完成的任务。在Eclipse控制台中显示文本时会出现问题。代码本身并不重要,因为它完成了它必须做的事情,但更重要的是输出生成 我遇到问题的代码如下:Fortran和Eclipse:在控制台中显示文本,eclipse,text,console,fortran,Eclipse,Text,Console,Fortran,我在使用Fortran 90和Eclipse时遇到了一点小困难。我在Eclipse上安装了“Photran”插件,并成功地将所有内容都编译得非常完美,总体而言,程序完成了它必须完成的任务。在Eclipse控制台中显示文本时会出现问题。代码本身并不重要,因为它完成了它必须做的事情,但更重要的是输出生成 我遇到问题的代码如下: subroutine main_program write(*,*) "Program begins!" <Program that takes ~5m
subroutine main_program
write(*,*) "Program begins!"
<Program that takes ~5mins to run>
write(*,*) "Program ends!"
end subroutine main_program
子程序主程序
写入(*,*)“程序开始!”
写入(*,*)“程序结束!”
结束子程序主程序
具体来说,问题是在控制台中,第一条消息应立即显示“程序开始!”,5分钟后应显示“程序结束!”。这两条消息仅在程序运行完毕后显示,而不是在程序执行时显示
我使用了:
subroutine main_program
print*, "Program begins!"
<Program that takes ~5mins to run>
print*, "Program ends!"
end subroutine main_program
子程序主程序
打印*,“程序开始!”
打印*,“程序结束!”
结束子程序主程序
但它一直在做同样的事情。我之前看到过一篇“类似”的帖子(虽然找不到链接,但很抱歉),但这不是我真正想要的。插入语句
flush 6
在第一个语句之后,编写语句,使其输出立即发送到控制台。一旦你明白了它在做什么,就把它插入你想要的任何地方
从OP描述的情况来看,很明显(对我来说)输出正在被缓冲,也就是说程序发出一个write
语句,并将输出传递给操作系统,操作系统可以随心所欲地进行操作——在这里,它等待程序结束,然后再将任何内容写入控制台。我猜它的缓冲能力有一些限制,如果程序超过这些限制,o/s将在程序结束之前清空缓冲区
Fortran now(我想是从2003年开始)提供了一种标准的方法,告诉o/s将缓冲区实际刷新到输出设备--flush
语句。最简单的形式是flush
只接受一个参数,即要刷新的输出通道的单元号。我猜OP的第6单元连接到了标准输出(又称为标准输出),因为这是一个近乎通用的默认配置,尽管Fortran语言标准不能保证
我认为flush*
不正确
如果您有一个2003年以前的编译器,那么(a)为了备份更新,(b)它可能支持刷新缓冲区的非标准方式;如果内存用于gfortran
,则用于提供一个子例程,该子例程的调用类似于调用flush(6)
除了Fortran之外,还有其他方法可以告诉o/s立即写入磁盘(或控制台或您拥有的东西)。如果您对o/s感兴趣,请查看这些文档。好的,下面是答案。插入语句
flush 6
在第一个语句之后,编写语句,使其输出立即发送到控制台。一旦你明白了它在做什么,就把它插入你想要的任何地方
从OP描述的情况来看,很明显(对我来说)输出正在被缓冲,也就是说程序发出一个write
语句,并将输出传递给操作系统,操作系统可以随心所欲地进行操作——在这里,它等待程序结束,然后再将任何内容写入控制台。我猜它的缓冲能力有一些限制,如果程序超过这些限制,o/s将在程序结束之前清空缓冲区
Fortran now(我想是从2003年开始)提供了一种标准的方法,告诉o/s将缓冲区实际刷新到输出设备--flush
语句。最简单的形式是flush
只接受一个参数,即要刷新的输出通道的单元号。我猜OP的第6单元连接到了标准输出(又称为标准输出),因为这是一个近乎通用的默认配置,尽管Fortran语言标准不能保证
我认为flush*
不正确
如果您有一个2003年以前的编译器,那么(a)为了备份更新,(b)它可能支持刷新缓冲区的非标准方式;如果内存用于gfortran
,则用于提供一个子例程,该子例程的调用类似于调用flush(6)
除了Fortran之外,还有其他方法可以告诉o/s立即写入磁盘(或控制台或您拥有的东西)。如果您对o/s感兴趣,请查看这些文档。非常感谢!经过两年的探索,我终于勇敢地提出了这样一个愚蠢的问题。谢谢你,先生,这有帮助吗?指定您的操作系统和编译器会很有帮助。它确实有帮助,而且很有效。我使用的是GCC Fortran、Windows 7(64位)、Intel i7。希望这有帮助,或者如果你需要更多的信息,我可以给你。非常感谢!经过两年的探索,我终于勇敢地提出了这样一个愚蠢的问题。谢谢你,先生,这有帮助吗?指定您的操作系统和编译器会很有帮助。它确实有帮助,而且很有效。我使用的是GCC Fortran、Windows 7(64位)、Intel i7。希望这有帮助,或者如果你需要更多的信息,我可以给它。