我使用win 8.1 64bit 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
答案 0 :(得分:3)
printf
缓冲 1 。这意味着当你调用它时,将不会立即打印。相反,它会存储您要打印的内容,并在缓冲区中存储了足够的文本时自动打印。
如果在print语句后使用\n
,它将自动打印整个缓冲区(这就是最后一次调用printf
打印所有内容的原因)。对于您的情况,您可能希望使用fflush
printf("Enter int: "); fflush(stdout);
scanf("%d",&i);
printf("Hello %d\n",i);
1 从技术上讲,它是stdout
被缓冲的,但更容易将其视为printf
此时被缓冲。