我正在用C编写一个程序来完成作业,我想在我的Windows 10桌面上使用它,但是在使用MinGW时我遇到了一个奇怪的问题。
我写的程序如下所示:
#include <stdio.h>
int main(){
//set up variables
int a, b, c, d;
//prompt user for integers
printf("Please enter four different integers:\n");
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
scanf("%d", &d);
//return sum
int sum = a+b+c+d;
printf("Sum is: %d", sum);
return 0;
}
当我编译它时,输出如下所示:(其中1,2,3和4是输入的数字)
1
2
3
4
Please enter four different integers:
Sum is: 10
这显然不应该发生,因为它已经失灵了。为了尝试排除故障,我在运行Arch的笔记本电脑上使用GCC编译了相同的代码,输出如下所示:(其中1,2,3和4是输入的数字)
Please enter four different integers:
1
2
3
4
Sum is: 10
这就是输出应该的样子。我在Linux和Windows计算机上使用Eclipse Mars作为IDE。我也在我的另一台笔记本电脑上尝试了相同的功能,即双启动Windows 10和Ubuntu,并且在MinGW和GCC之间也有相同的结果。
如果有人有任何想法为什么MinGW会以这种方式表演,我会非常感激!谢谢!
答案 0 :(得分:2)
不同的系统/库在何时刷新缓冲流的输出时具有不同的启发式方法。为了在使用scanf()读取之前可移植地确保刷新printf()语句并将其打印到控制台,您需要将显式调用交错为fflush(stdout)
。