我正在使用 win 8.1 64bit Eclipse Luna 4.4.0 并使用 gcc 4.6.4 进行编译,问题是例如
在这个简单的程序中,myprintf和scanfstatements 以错误的顺序出现在控制台上。
#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;
}
Run Code Online (Sandbox Code Playgroud)
它这样做:
4
输入整数:你好 4
而不是这个:
输入整数:4
你好 4
printf被缓冲1。这意味着当你调用它时,它不会立即打印。相反,它将存储您告诉它要打印的内容,并在缓冲区中存储了足够的文本时自动打印它。
如果\n在打印语句中使用after,它将自动打印整个缓冲区(这就是为什么最后一次调用printf打印所有内容)。对于您的情况,您可能需要使用手动冲洗fflush
printf("Enter int: "); fflush(stdout);
scanf("%d",&i);
printf("Hello %d\n",i);
Run Code Online (Sandbox Code Playgroud)
1从技术上讲,它stdout是被缓冲的,但此时更容易将其视为printf被缓冲。