[英]print to screen from c console application overwriting current line
我想在ac控制台程序中覆盖当前行,以实现类似于linux shell命令“ top”中的输出。 如果可能,该方法应在Windows和Linux下工作。
while (i < 100) {
i++;
sprintf(cTmp, "%3d", i);
puts(cTmp);
if ((character = mygetch()) == 'q') {
break;
}
}
我想在每次迭代中覆盖以前的数字,如果可能的话,请查看用户是否在不暂停循环的情况下输入了字符。 如果用户按下键“ q”,则循环应立即停止。
如果这就是您要做的一切,则不需要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);
}
}
回车符'\\r'
将光标移动到当前行的开头。 如果您想做的比这更有趣,请使用ncurses
库。
我不知道这是否可以在Windows上使用,与大多数其他OS相比,Windows控制台有些奇怪。
您应该能够使用SetConsoleCursorPosition之类的工具来操纵控制台光标。 将光标移到该行的开头,用空格字符覆盖整行,然后将光标移回到该行的开头。 您甚至可以将其包装在“ clear_line()”函数中以便于使用。
您也可以使用SetConsoleActiveScreenBuffer来执行此操作。 而不是覆盖当前行,而是写入第二个屏幕缓冲区。 完全填充完第二个缓冲区后,使其成为活动缓冲区。 然后,清除原始屏幕缓冲区,并将其用于下一个显示帧等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.