我想在控制台屏幕上显示使用 DO 循环完成的计算进度。我可以像这样将进度变量打印到终端:
PROGRAM TextOverWrite_WithLoop
IMPLICIT NONE
INTEGER :: Number, Maximum = 10
DO Number = 1, MAXIMUM
WRITE(*, 100, ADVANCE='NO') REAL(Number)/REAL(Maximum)*100
100 FORMAT(TL10, F10.2)
! Calcultations on Number
END DO
END PROGRAM TextOverWrite_WithLoop
以上代码在控制台屏幕上的输出是:
10.00 20.00 30.00 40.00 50.00 60.00 70.00 80.0090.00 100.00
全部在同一行,仅由控制台窗口包裹。
ADVANCE='No' 参数和 TL10(制表符留下这么多空格)编辑描述符可以很好地覆盖同一行上的文本,例如以下代码的输出:
WRITE(*, 100, ADVANCE='NO') 100, 500
100 FORMAT(I3, 1X, TL4, I3)
是:
500
代替:
100 500
因为 TL4 编辑描述符。
从这两个例子可以得出结论,WRITE 语句不能覆盖另一个 WRITE 语句或之前执行相同 WRITE 语句(如在 DO 循环中)所写入的内容。
这可以通过某种方式克服吗?
我在 Windows 7 RC1 上使用 FTN95 编译器。 (G95编译器的安装程序蓝屏Windows 7 RC1,甚至认为它在Vista上运行良好。)
我知道问题 Supressing line breaks in Fortran 95 write statements ,但它对我不起作用,因为该问题的答案意味着新输出被添加到同一行的先前输出中;而不是新的输出覆盖以前的输出。
提前致谢。
通过使用 ACHAR(13)
对回车进行编码,以下内容应该可以跨系统移植。
character*1 creturn
! CODE::
creturn = achar(13) ! generate carriage return
! other code ...
WRITE( * , 101 , ADVANCE='NO' ) creturn , i , npoint
101 FORMAT( a , 'Point number : ',i7,' out of a total of ',i7)
我是一名优秀的程序员,十分优秀!