Обработка ввода CTRL + D с помощью fgets () в C - PullRequest
0 голосов
/ 11 декабря 2019

Я получаю стандартный ввод от пользователя с циклом 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 неопределенно долго, не допуская дальнейшего ввода данных пользователем.

Я подозреваю, что это странная вещь с неправильной очисткой потока ввода или чего-то еще, но пока мои решения не сработали.

...