Первая печать в вашем коде (и аналогично другим):
printf("enter height of box: ")
По умолчанию эта строка помещает текст в буфер.Буфер записывается в терминал («сбрасывается»), только если происходит одно из следующих действий:
- Буфер заполнен (может быть 1024 байта, 16384 или любое другое число).
В конце текста есть новая строка (при условии, что вывод на терминал).
Обратите внимание, что это обычное поведение, но не гарантируется стандартом.Чтение Строка stdout буферизована, небуферизована или неопределена по умолчанию? для охвата этой темы.
Некоторые реализации C автоматически сбрасывают stdout при чтении из stdin, но многиереализации не делают.
Чтение Читает ли stdin stdout? , чтобы охватить эту тему.
Так что вы можете увидеть ваше приглашение, если выизмените строку на:
printf("enter height of box: \n");
Второй вариант - принудительная очистка, чтобы буфер выводился на выход:
printf("enter height of box: ");
fflush(stdout);
Третий вариант - отключение буферизации.полностью.Для этого вы можете использовать setbuf :
void setbuf( FILE* stream, char* buffer );
- buffer -
указатель на буфер для используемого потока. Если задано значение NULL, буферизация отключена .Если не ноль, должно быть в состоянии содержать как минимум символы BUFSIZ
Итак, просто добавьте следующее в начале программы, и вся буферизация stdout будет отключена:
setbuf(stdout, NULL);