gpt4 book ai didi

printing - 如何格式化 PRINT 或 WRITE 语句以覆盖控制台屏幕上的当前行?

转载 作者:bug小助手 更新时间:2023-10-28 10:50:32 25 4
gpt4 key购买 nike

我想在控制台屏幕上显示使用 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)

关于printing - 如何格式化 PRINT 或 WRITE 语句以覆盖控制台屏幕上的当前行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1390125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com