为什么以下程序不会生成任何可见输出?

时间:2009-08-11 13:03:44

标签: c printf

以下C程序不会在屏幕上打印任何内容。

我使用gcc编译了程序:

#include<stdio.h>

main()
{
    printf("hai");
    for(;;);
}

4 个答案:

答案 0 :(得分:9)

最有可能的是,stdout是行缓冲的。您的程序不会调用fflush或发送换行符,因此缓冲区不会被写出来。

#include <stdio.h>

int main(void) {
    printf("hai\n");
    for(;;)
    ;
    return 0;
}

另请参阅question 12.4中的What's the correct declaration of main()?C FAQ

答案 1 :(得分:4)

这是由stdio中发生的缓冲引起的(即除非你通过包含\ n或fflush告诉它,否则不会立即输出)。请参阅解释此问题的Write to stdout and printf output not interleaved

(p.s。或者编译器对#include中的拼写错误不满意)

答案 2 :(得分:3)

默认情况下,标准输出往往是行缓冲,因此您没有看到任何内容的原因是因为您没有刷新该行。

这将有效:

#include <stdio.h>
int main (int argC, char *argV[])
{
    printf("hai\n");
    for(;;)
        ;
    return 0;
}

或者,您可以fflush标准输出或者只是摆脱无限循环以便程序退出:

#include <stdio.h>
int main (int argC, char *argV[])
{
    printf("hai");
    return 0;
}

但是你可能还想要换行。

答案 3 :(得分:2)

您的for(;;)循环停止刷新流。正如其他人所建议的那样,在输出的字符串中添加换行符,或者明确刷新流:

fflush( stdout );

在你的printf之后。并更正#include的拼写。