向stdout显示单行以更新部分而不是在C中打印新行

时间:2013-12-30 01:03:33

标签: c linux stdout

是否可以在包含变量的Linux OS上向控制台打印(在C中)一行文本,以便在变量更改时更改打印行而不是打印新行?例如,如果我有以下C代码:

void main()
{
     int i;
     for(i=1;i<=10;i++){
        printf("%d\n",i);
        sleep(5);
     }
}

按原样,这将打印十行。但是我想要打印一行更新自己,以便在i更改时显示{。}}的值。

3 个答案:

答案 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)来显示它是一个选项?