使用scanf未检测到EOF

时间:2019-04-24 21:36:46

标签: c io eof ansi-c

我创建了一个函数,该函数应该从文件读取一些整数到数组。该函数还应该捕获整数不足以填充数组并终止的情况(即填充数组时达到EOF)。

我的问题:scanf重用了已经扫描的值,该函数似乎无法解决问题。因此,例如,大小为4的数组的输入12 22将以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)为true,终止函数并显示错误消息。

但是,看来scanf的转换失败并未发生。

0 个答案:

没有答案