为什么Eclipse';s Photran要求';调用flush(6)和#x27;在'之后;写';防止缓冲到std out?

为什么Eclipse';s Photran要求';调用flush(6)和#x27;在'之后;写';防止缓冲到std out?,eclipse,fortran90,flush,gfortran,photran,Eclipse,Fortran90,Flush,Gfortran,Photran,我正在Windows7专业机器上使用经典的Eclipse4.2.2和Photran插件以及cygwin的gfortran编译器。如果我删除下面的“调用刷新(6)”,则程序在从std in读取后才会写入控制台: program mult1 implicit none integer :: i,j,k ! ! ! This program just multiplies two integers ! together. ! ! write(*,*) 'Enter i,j: ' call flu

我正在Windows7专业机器上使用经典的Eclipse4.2.2和Photran插件以及cygwin的gfortran编译器。如果我删除下面的“调用刷新(6)”,则程序在从std in读取后才会写入控制台:

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

有什么想法或解决办法吗

除非给出明确的指示,否则FORTRAN代码将“在感觉合适时”或在系统允许时写入输出。这都是关于缓冲的。对
flush
的调用被放在这里正是因为这个原因:编写器想要在那里强制输出,原因很明显。然而,我从未见过在这种情况下需要刷新的代码。我会尝试用
print*,
替换
write(*,*)


另一种可能是编译代码,这样就不允许输出缓冲。检查手册页中是否存在适当的标志。

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

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

  • 包括环境变量:GFORTRAN\u UNBUFFERED\u ALL
  • 并将其赋值为:1
  • 如果您正在使用PHOTRAN(Fortran的eclipse插件),则必须执行以下操作:

  • 在顶置栏中导航以运行>运行配置
  • 在左窗格中,在下拉菜单Fortran Local Application>您的项目中选择您的项目
  • 在右侧窗格中,选择“环境选项卡”
  • 单击“新建”并添加上面列出的变量和值
    谢谢你,鲍勃。我是添加了“调用刷新(6)”的人,和您一样,在我注意到输出被缓冲之前,我觉得没有必要这样做。我不走运地试着打印。我告诉你这很奇怪!好奇!好啊对不起,我帮不上什么忙了。祝你好运。如果您找到答案,请告诉我们!