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.
- Код для функции printf в C
- Что произойдет, если '&' не будет введен в утверждение 'scanf'?
- Почему этот код печатает два раза?
- GCC фатальная ошибка: stdio.h: нет такого файла или каталога
- Какую библиотеку CI / O следует использовать в коде на C ++?
- Каков наилучший способ вернуть случайную строку в текстовый файл с помощью C?
- Каковы правила автоматического сброса буфера stdout в C?
- stdio.h не стандартно в C ++?
- Перенаправление stdin и stdout из C
- Как читать / анализировать ввод в C? Часто задаваемые вопросы
- Чтение строки с помощью scanf () не очень хорошо?
- Java: как прервать чтение streamа из System.in
- C эквивалентно просмотру fstream
Как @thejh сказал, что ваш stream, похоже, буферизирован. Данные еще не записаны в контролируемую последовательность.
Вместо того, чтобы возиться с настройкой буфера, вы можете вызвать fflush
после каждой записи, чтобы извлечь выгоду из буфера и по-прежнему принудительно использовать желаемое поведение / отображение явно.
printf( "Enter first integer\n" ); fflush( stdout ); scanf( "%d", &i1 );
вы можете попробовать отключить буферизацию в stdout, используя
setbuf(stdout, NULL);
Кажется, что выход вашей программы буферизирован. Попробуйте включить буферизацию строк явно:
setlinebuf(stdout);