是否可以在包含变量的Linux OS上向控制台打印(在C中)一行文本,以便在变量更改时更改打印行而不是打印新行?例如,如果我有以下C代码:
void main()
{
int i;
for(i=1;i<=10;i++){
printf("%d\n",i);
sleep(5);
}
}
Run Code Online (Sandbox Code Playgroud)
这样就可以打印十行.但我想打印一行更新自己以显示i它何时发生变化的价值.
类似下面的内容应该可以完成这项工作(取自/修改自如何更新终端中打印的消息而不重新打印(Linux))
int main(int argc, char *argv[]) {
for(int i=1;i<=10;++i) {
printf("\r[%3d%%]",i);
fflush(0);
sleep(5);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
在Linux上,void main(void)是未定义的行为; 返回类型是int- 没有例外.在Windows上,规则是不同的; 在Unix上,它们很简单 - main()返回int!
使用'\r'回车符和fflush():
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 10; i++)
{
printf("\r%d", i);
fflush(stdout);
sleep(5);
}
putchar('\n');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
curses除非您的显示需要变得更复杂,否则无需使用库.
注意:如果您正在倒计时(或者当前输出行的长度因任何原因而减少),则需要确保在先前显示的数据上写入空白.因此,例如,您可能需要格式字符串"\r%-4d"从9999到0进行计数,而不会在显示屏上留下不需要的数字.