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