printf не печатает на экран

Если я попытаюсь запустить следующий простой код под Cygwin в Windows 7,

#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.


person user1060986    schedule 01.06.2013    source источник
comment
Попробуйте запустить приложение в терминале cygwin.   -  person akhil    schedule 01.06.2013


Ответы (3)


Как сказал @thejh, ваш поток кажется буферизованным. Данные еще не записаны в управляемую последовательность.

Вместо того, чтобы возиться с настройкой буфера, вы можете вызывать fflush после каждой записи, чтобы извлечь выгоду из буфера и по-прежнему явно обеспечивать желаемое поведение/отображение.

printf( "Enter first integer\n" );
fflush( stdout );
scanf( "%d", &i1 );
person zsawyer    schedule 01.06.2013
comment
Большое спасибо, да, это так. Очень признателен. - person user1060986; 01.06.2013

вы можете попробовать отключить буферизацию в стандартном выводе, используя

setbuf(stdout, NULL);
person Dayal rai    schedule 01.06.2013
comment
Вопрос; зависит ли этот компилятор/инструментарий или зависит от платформы? Можно ли его отключить с помощью флага компилятора? - person Andy J; 30.08.2018

Кажется, что вывод вашей программы буферизован. Попробуйте явно включить буферизацию строк:

setlinebuf(stdout);
person thejh    schedule 01.06.2013
comment
Большое спасибо, да, это тоже сработало. Очень признателен. - person user1060986; 01.06.2013