从c控制台应用程序打印到屏幕覆盖当前行

tac*_*o24 1 c linux windows console-application

我想覆盖ac控制台程序中的当前行,以实现像linux shell命令"top"中的输出.如果可能,该方法应该在Windows和Linux下工作.

while (i < 100) {
       i++;
       sprintf(cTmp, "%3d", i);
       puts(cTmp);
       if ((character = mygetch()) == 'q') {
          break;
       }
    }
Run Code Online (Sandbox Code Playgroud)

我想覆盖每次迭代中的前一个数字,如果可能的话,查看用户是否输入了一个字符而没有暂停循环.如果用户按下'q'键,循环应立即停止.

Die*_*Epp 8

你不需要ncurses这就是你正在做的事情.您需要做的就是将光标移动到行的开头并覆盖其中的内容,并确保刷新输出缓冲区,因为stdout如果它连接到终端,通常是行缓冲的.这是一个例子:

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
    int i;
    for (i = 0; ; ++i) {
        printf("\rIteration %d", i);
        fflush(stdout);
        usleep(250000);
    }
}
Run Code Online (Sandbox Code Playgroud)

回车符,'\r'将光标移动到当前行的开头.如果您想做更多比这更奇特的事情,请使用该ncurses库.

我不知道这是否适用于Windows,与大多数其他操作系统相比,Windows控制台有些奇怪.