我正在做一个小测试应用程序,我想知道是否有任何方法可以在控制台中删除以前打印的行。我实际希望实现的是向用户显示控制台右上角的倒计时。我我使用的是C语言,而不是C ++,并且使用的是Codeblocks,而不是相关的。
谢谢!
答案 0 :(得分:0)
当你写入控制台时,你真正在做的是写入与stdout和stderr相对应的文件句柄。如果您正在写入一个未实时呈现给用户的文件,那么在写入内容后“备份”并使用新数据覆盖文件的某些部分并不是什么大问题。但是,由于写入stdout / stderr的字符会立即呈现给用户,因此没有一种简单的方法可以“备份”并将新数据写入控制台。
一个可行的解决方案是找出控制台的大小,并在每次要更新值时打印出足够的空格来填充控制台。例如,如果您知道用户的控制台高20行,并且您希望在控制台的左上角显示一些更新值,则可以打印出20个换行符,然后输出您想要输出的任何数据。但是,这也意味着您在控制台中显示的任何其他数据也必须再次打印出来。这可能最终会比预期更慢更丑陋。
我建议尝试一个curses库,就像mah建议的那样。 Here是如何开始使用ncurses的一个很好的概述。
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, c = 80;
char *cp = getenv("COLUMNS");
if (cp) c = atoi(cp);
for (i = 10; printf("%*d\r", c-1, i), fflush(stdout), i; --i) sleep(1);
printf("\n");
}