为什么withot newline charecter printf不起作用?

时间:2019-01-18 07:04:16

标签: c

我被要求编写一个程序来闪烁给定的单词而不使用c中的clrscr函数,并且当我在printf中添加\n时,我正在尝试下面的代码,然后它只能正常工作,当我删除了\n,但它什么也没显示?

#include <stdio.h>
#include <unistd.h>

int main()
{
    int j=10;
    while (j--)
   {
       printf("BLINK");
       sleep(1);
       system ("clear"); 
       sleep(1);
   }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

缓冲

默认情况下,行缓冲是输出到stdoutprintf写入的地方)。这意味着写入stdout的文本仅放入缓冲区中,除非缓冲区已满或写入了换行符,否则它们不会被刷新(实际上已写入设备)。 / p>

有关此方面的信息,请阅读任何好书,教程或上课。

答案 1 :(得分:1)

您可以通过添加标准输出来解决问题。

#include <stdio.h>
#include <unistd.h>

int main()
{
    int j=10;
    while (j--)
   {
       printf("BLINK");
       fflush(stdout);
       sleep(1);
       system ("clear"); 
       sleep(1);
   }

    return 0;
}

但是system(“ clear”)可能会使代码审阅者哭泣,所以也许考虑使用诸如退格转义序列之类的东西。

#include <stdio.h>
#include <unistd.h>

int main()
{
    int j=10;
    while (j--)
   {
       printf("BLINK");
       fflush(stdout);
       sleep(1);
       printf("\b\b\b\b\b     \b\b\b\b\b");
       fflush(stdout);
       sleep(1);
   }

    return 0;
}