printf不打印到屏幕

时间:2013-06-01 07:06:00

标签: c cygwin stdio

如果我尝试在Windows 7上的Cygwin下运行以下简单代码,

#include <stdio.h>
int main() {
int i1, i2, sums;

printf( "Enter first integer\n" );
scanf( "%d", &i1 );

printf( "Enter second integer\n" );
scanf( "%d", &i2 );

sums = i1 + i2;
printf( "Sum is %d\n", sums );

return 0;
}

它编译(通过gcc)没有问题,但是当我尝试执行它时,第一个语句(“输入第一个整​​数”)没有打印到终端,我必须输入两个连续的数字(例如3 4)在我得到之前,

3
4
Enter first integer
Enter second integer
Sum is 7

任何人都可以向我解释这里发生了什么。这在MinGW下非常有效。

3 个答案:

答案 0 :(得分:8)

就像@thejh所说,你的流似乎是缓冲的。数据尚未写入受控序列。

您可以在每次写入后调用fflush,而不是摆弄缓冲区设置,以便从缓冲区中获利并仍然明确强制执行所需的行为/显示。

printf( "Enter first integer\n" );
fflush( stdout );
scanf( "%d", &i1 );

答案 1 :(得分:3)

您可以尝试使用

禁用stdout中的缓冲
setbuf(stdout, NULL);

答案 2 :(得分:0)

似乎缓冲了程序的输出。尝试明确启用行缓冲:

setlinebuf(stdout);