c - 向标准输出显示单行以更新部分而不是在 C 中打印新行

标签 c linux stdout

是否可以在包含变量的 Linux 操作系统上打印出(在 C 中)一行文本到控制台,以便当变量更改时,它会更改打印的行而不是打印新行?例如,如果我有以下 C 代码:

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

照原样,这将打印十行。但我想打印一行,它会自行更新以显示 i 更改时的值。

最佳答案

在 Linux 上,void main(void) 是未定义的行为;返回类型是 int — 无一异常(exception)。在 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 而不会在显示上留下不需要的数字。

关于c - 向标准输出显示单行以更新部分而不是在 C 中打印新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20831939/

相关文章:

c++ - 如何同时使用 2 个套接字 PF_INET 和 PF_PACKET?

c - C语言函数如何判断文件是否为elf文件?

Python3 单元测试 : How to print to stdout out

php - 从 PHP 脚本将数据传递给 Python Web 爬虫

C - 无法在递归函数内进行索引

c - C 中的 Unix Shell - 更改目录

linux - 如何在Linux中的文件中连接具有不同模式的两行?

python - 在 Python 中的同一行上打印多个

c - C 中的 VOID 数据类型

c - 测试有关 scanf 返回值的所有情况