Я получаю стандартный ввод от пользователя с циклом do-while и включил базовую обработку ошибок:
#include <stdio.h>
int validateInput(char *buffer, int bufferSize)
{
if (fgets(buffer, bufferSize, stdin) == NULL) /* If fgets() errors */
{
fprintf(stderr, "ERROR: Malformed input\n");
return 1;
}
return 0;
}
int main()
{
char buffer[1024];
do
{
printf("\nInput stuff: ");
} while (validateInput(buffer, sizeof(buffer)) == 1);
return 0;
}
Код работает нормально, и есть второй оператор if
(не показан, ноотсюда второй аргумент функции) после первой проверки на переполнение буфера, которая тоже отлично работает.
Проблема в том, что если я введу CTRL+D
самостоятельно (<some input> then CTRL+D
работает нормально), код будетвыводить printf
и fprintf
неопределенно долго, не допуская дальнейшего ввода данных пользователем.
Я подозреваю, что это странная вещь с неправильной очисткой потока ввода или чего-то еще, но пока мои решения не сработали.