8

如果我尝试在 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 下运行良好。

4

3 回答 3

13

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

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

printf( "Enter first integer\n" );
fflush( stdout );
scanf( "%d", &i1 );
于 2013-06-01T12:37:52.617 回答
7

您可以尝试通过使用禁用标准输出中的缓冲

setbuf(stdout, NULL);
于 2013-06-01T09:28:40.857 回答
2

It seems that the output of your program is buffered. Try enabling line buffering explicitly:

setlinebuf(stdout);
于 2013-06-01T07:44:00.727 回答