Fortran中退格字符(char(8))的使用

Fortran中退格字符(char(8))的使用,fortran,ascii,Fortran,Ascii,对于迭代过程中的“美味”输出,我想在Fortran中使用以下方法(我在一些用C++编写的程序中看到了这种方法)。 每次新的迭代都会在控制台中为我提供一行相应的信息: Iteration XX Accuracy X.XXXXE-XX Time spent XX seconds 我希望每一行都替换上一行(即,标签“迭代”“精度”…等保持不变,而值会发生变化) 我尝试了不同的变体,包括 backspace(6) backspace(0) write (*,*) char(8)//'Accuracy

对于迭代过程中的“美味”输出,我想在Fortran中使用以下方法(我在一些用C++编写的程序中看到了这种方法)。 每次新的迭代都会在控制台中为我提供一行相应的信息:

Iteration XX Accuracy X.XXXXE-XX Time spent XX seconds
我希望每一行都替换上一行(即,标签“迭代”“精度”…等保持不变,而值会发生变化)

我尝试了不同的变体,包括

backspace(6)
backspace(0)
write (*,*) char(8)//'Accuracy ...'
当然,前两行给出一个运行时错误,最后一行什么也不给出


如何实现这种方法?

这可能是一个有点复杂的解决方案,但一种选择是使用
ncurses
库-

下面是可从链接页面下载的程序
testcurs.f90
的修改。它只显示正在逐步更新的进度消息。为了测试它,您还需要
ncurses.f90
模块,然后链接到
-lncurses
,即

gfortran -c ncurses.f95
gfortran -o test testcurs.f95 -lncurses
示例(仅显示程序本身,
testcurs.f90
还包含
initTest
等的定义):


正如@francescalus正确指出的,解决方案在参考链接中给出。但最简单的不是被选择的那个。由@tony rollett给出的例子更方便<代码>写入(单位,“(A,i,A\)”)字符(13)/“迭代”,iter,“精度”,accur。
program testcurses
  use curses
  use commands
  type (C_PTR) :: iwin = C_NULL_PTR
  integer (C_INT) :: key
  integer :: istat, new_option=1, old_option=0
  CHARACTER(LEN=1024) :: msg

  call initTest(iwin, istat)

  if (istat /= 0) then
    write(*,'(a)') 'ERROR: initscr failed!'
    stop
  end if

  ierr = wbkgd(iwin, curses_a_reverse)
  ierr = erase()
  ierr = attrset(curses_a_bold)
  DO i = 10, 100, 10
    WRITE(msg, '(''Progress '', I0, ''%'')') i

    ierr = mvaddstr(20, 20, TRIM(msg) // C_NULL_CHAR)
    ierr = refresh()
    CALL SLEEP(1)
  END DO
  key = getch()

  ierr = delwin(iwin)
  ierr = endwin()
end program testcurses