2015-09-05 164 views
1

我正在用C编写一个程序,我想在Windows 10桌面上工作,但是在使用MinGW时遇到了一个奇怪的问题。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 

这显然不应该发生,因为这是无序的。要尝试解决问题,我编译使用GCC上我的笔记本电脑上运行拱相同的代码和输出是这样的:(其中1,2,3和4是输入的号码)

Please enter four different integers: 
1 
2 
3 
4 
Sum is: 10 

这是输出应该是的样子。我在Eclipse和Windows计算机上使用Eclipse Mars作为IDE。我也在我的其他笔记本电脑上尝试过,它可以启动Windows 10和Ubuntu,并且在MinGW和GCC之间也有相同的结果。

如果有人有任何想法,为什么MinGW会采取这种行动,我将不胜感激!谢谢!

+1

[C中的Flushing缓冲区]的可能重复(http://stackoverflow.com/questions/12450066/flushing-buffers-in-c) –

+1

您需要使用fflush(stdout)刷新缓冲区。请参阅:http://stackoverflow.com/questions/12450066/flushing-buffers-in-c –

+0

我相信这是关于您的IDE使用的特定命令行,可能是导致输入/输出事件的时间稍有不同(即通过IDE的命令行) –

回答

2

不同的系统/库对于何时刷新缓冲流的输出具有不同的启发式。为了可移植地确保在用scanf()读取之前将printf()语句刷新并打印到控制台,您需要将显式调用交织到fflush (stdout)

+0

谢谢!这似乎是问题所在,我会牢记这一点!我是C新手(我在Java上学过),所以我仍然在学习。 – AgentOrange96