是否可以在包含变量的Linux OS上向控制台打印(在C中)一行文本,以便在变量更改时更改打印行而不是打印新行?例如,如果我有以下C代码:
void main()
{
int i;
for(i=1;i<=10;i++){
printf("%d\n",i);
sleep(5);
}
}
按原样,这将打印十行。但是我想要打印一行更新自己,以便在i
更改时显示{。}}的值。
答案 0 :(得分:5)
在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;
}
除非您的显示需求变得更复杂,否则无需使用curses
库。
注意:如果您倒计时(或者当前输出行的长度因任何原因而减少),您需要确保在先前显示的数据上写入空白。因此,例如,您可能需要格式字符串"\r%-4d"
从9999到0进行计数,而不会在显示屏上留下不需要的数字。
答案 1 :(得分:4)
以下内容应该完成工作(从How to update a printed message in terminal without reprinting (Linux)获取/修改)
int main(int argc, char *argv[]) {
for(int i=1;i<=10;++i) {
printf("\r[%3d%%]",i);
fflush(0);
sleep(5);
}
printf("\n");
}
答案 2 :(得分:-1)
不完全确定你要做什么,但是可能会将变量的内容写入临时文件并使用watch(1)来显示它是一个选项?