Fortran和Eclipse:在控制台中显示文本

时间:2016-03-08 20:37:14

标签: eclipse text console fortran

我在使用Fortran 90和Eclipse方面遇到了一些小问题。我在Eclipse中安装了“Photran”插件,并设法完美地编译了所有内容,整个程序完成了它必须做的事情。在Eclipse控制台中显示文本时出现问题。它本身的代码并不重要,因为它完成了它必须做的事情,但更多的是输出生成。

我遇到问题的代码如下:

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

但它继续做同样的事情。我之前看过一篇“类似”的帖子(虽然找不到链接,对不起),但这并不是我想要的。

1 个答案:

答案 0 :(得分:0)

好的,这是答案。插入声明

flush 6
在第一个write语句之后

将其输出立即发送到控制台。一旦你理解了它的作用,就把它插入你想要的任何地方。

很明显(对我来说)情况OP描述了输出被缓冲,即程序发出write语句并将输出传递给操作系统,因为它很好 - 在此之前,它等待程序结束,然后再将任何内容写入控制台。我猜它的缓冲功能有一些限制,如果程序超出它们,o / s会在程序结束前清空缓冲区。

Fortran现在(自2003年以来我认为)提供了一种告诉o / s实际将缓冲区刷新到输出设备的标准方法 - flush语句。最简单的形式flush只接受一个参数,即要刷新的输出通道的单元号。我猜测OP已将单元6连接到stdout(又名*),因为这是一种近乎通用的默认配置,但Fortran语言标准并不能保证这一点。

我不认为flush *是正确的。

如果你有一个2003年之前的编译器,那么(a)用于Backus&#39;更新和(b)它可能支持一种非标准的方式来刷新缓冲区;如果内存服务gfortran用于提供一个类似call flush(6)的子例程。

在Fortran之外还有其他方法可以告诉o / s立即写入磁盘(或控制台或你有什么)。如果您对它们感兴趣,请查看您的o / s的文档。