首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Eclipse的Photran在'write‘之后需要'call flush(6)’来防止缓冲到std out?

为什么Eclipse的Photran在'write‘之后需要'call flush(6)’来防止缓冲到std out?
EN

Stack Overflow用户
提问于 2013-06-05 22:04:04
回答 2查看 302关注 0票数 0

我在Windows7专业版机器上使用Classic Eclipse 4.2.2和Photran插件和cygwin的gfortran编译器。如果我删除下面的'call flush(6)‘,程序不会写入控制台,直到从std中读取:

代码语言:javascript
复制
program mult1
implicit none

integer :: i,j,k

!
!
! This program just multiplies two integers
! together.
!
!

write(*,*) 'Enter i,j: '
call flush(6)
read(*,*)i,j

k = i*j

write(*,*) 'The product is ', k
stop
end program mult1

有什么想法或解决方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-18 00:05:48

我通过阻止所有缓冲解决了这个问题。这不是一个完美的解决方案(缓冲一些输出而不是其他输出会很好),但它解决了我的问题-也就是说,不必每次我写(,)时都调用flush(6)。

为了防止gfortran的所有缓冲(注意:它是特定于编译器的),

  1. 包含环境变量: GFORTRAN_UNBUFFERED_ALL
  2. And为其赋值: 1

如果您正在使用PHOTRAN (用于Fortran的eclipse插件),则必须执行以下操作:

  1. 在顶部栏中导航到左侧窗格,在右侧窗格中的下拉菜单Fortran Local Run>Run Run>Run
  2. 中选择您的项目,选择“环境”选项卡
  3. 单击“新建”,然后添加上面列出的变量和值。
票数 0
EN

Stack Overflow用户

发布于 2013-06-06 01:02:14

除非给出了明确的指示,否则FORTRAN代码会在“感觉像这样的时候”,或者当系统感觉允许的时候,写到输出。这一切都是关于缓冲的。这里对flush的调用正是出于这个原因:出于显而易见的原因,编写器想要在那里强制输出。然而,我从来没有见过在这种情况下需要刷新的代码。我会尝试用print *,替换write(*,*)

ANother的可能性可能是编译你的代码,所以输出缓冲是不允许的。如果存在相应的标志,请查看手册页。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16942059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档