控制台输出顺序错乱

6
我正在使用win 8.1 64位Eclipse Luna 4.4.0,并使用gcc 4.6.4进行编译,问题是例如,在这个简单的程序中,我的printf和scanf语句出现在控制台上的顺序不正确。
#include <stdio.h>
#include <stdlib.h>

int main(void) {

    int i;

    printf("Enter int: ");
    scanf("%d",&i);
    printf("Hello %d\n",i);

    return EXIT_SUCCESS;
}

它实现的功能是:

4

输入int: Hello 4

而不是这样:

输入int: 4

Hello 4


2
对我来说有点奇怪。在第一个打印后尝试使用fflush(stdout); - user1300630
1个回答

5

printf是有缓冲的1。这意味着当您调用它时,它不会立即打印。相反,它将存储您要打印的内容,并在缓冲区中存储足够的文本时自动打印。

如果您在打印语句后使用\n,它将自动打印整个缓冲区(这就是为什么最后一次调用printf打印所有内容的原因)。对于您的情况,您可能需要使用fflush进行手动刷新。

printf("Enter int: "); fflush(stdout);
scanf("%d",&i);
printf("Hello %d\n",i);

1 从技术上讲,是stdout被缓冲了,但在这一点上将其视为printf被缓冲更容易理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接