EOF не обнаружен при использовании scanf - PullRequest
1 голос
/ 25 апреля 2019

Я создал функцию, которая должна читать некоторые целые числа из файла в массив.Функция также должна отлавливать случаи, когда целых чисел недостаточно для заполнения массива, и завершаться (т. Е. Достигается EOF при заполнении массива).

Моя проблема: функция, похоже, не перехватывает регистр eof, с scanf повторное использование уже отсканированных значений.Так, например, входные данные 12 22 для массива размера 4 заполнят массив как 12 22 22 22.

int fillArray(int* array, int size) {
    int temp = 0, i;

    for (i = 0; i<size; ++i) {
        if(!scanf("%d", &temp) || !(temp > 0)) {
            if(feof(stdin)) {
                printf("Error: not enough numbers"); /* Should be EOF */
                return 1;
            }
            printf("Error: positive numbers only");
            return 1;
        } else {
            heapArray[i] = temp;
        }
    }
    return 0;
}

Я ожидал, что после второй итерации scanf должен вернуть 0 послеошибка преобразования, входящая в больший блок if.В этот момент feof(stdin) должно быть истинным, завершая функцию и печатая сообщение об ошибке.

Однако, похоже, что сбой преобразования для scanf не произойдет.

...