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

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

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

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

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

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

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

 setbuf(stdout, NULL); 

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

 setlinebuf(stdout); 
  • stdlib и цветной выход в C
  • Win32 - чтение с stdin с таймаутом
  • 'printf' vs. 'cout' в C ++
  • Есть ли эквивалент Windows для fdopen для HANDLE?
  • Давайте будем гением компьютера.