0

我在 Windows 7 Professional 机器上使用带有 Photran 插件和 cygwin 的 gfortran 编译器的 Classic Eclipse 4.2.2。如果我删除下面的 'call flush(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

有什么想法或修复吗?

4

2 回答 2

0

除非另有明确指示,否则 FORTRAN 代码将在“感觉像这样”或系统感觉允许时写入输出。这都是关于缓冲的。正是出于这个原因,才将调用flush放在这里:出于显而易见的原因,作者想在此处强制输出。但是,我从未见过在这种情况下需要刷新的代码。我会尝试write(*,*)print *,.

另一种可能性可能是编译您的代码,以便不允许输出缓冲。检查手册页中是否存在适当的标志(如果存在)。

于 2013-06-05T17:02:13.683 回答
0

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

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

  1. 包括环境变量:GFORTRAN_UNBUFFERED_ALL
  2. 并为其分配值:1

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

  1. 在顶部栏中导航到运行>运行配置
  2. 在左侧窗格中,在下拉菜单 Fortran Local Application> Your Project 中选择您的项目
  3. 在右侧窗格中,选择“环境选项卡”
  4. 单击“新建”并添加上面列出的变量和值。
于 2013-06-17T16:05:47.747 回答