使用 scanf 未检测到 EOF

EOF not detected using scanf

提问人:P.Diddy 提问时间:4/25/2019 最后编辑:P.Diddy 更新时间:4/25/2019 访问量:39

问:

我创建了一个函数,它应该将一些整数从文件读取到数组中。该函数还应该捕获没有足够的整数来填充数组的情况,并终止(即在填充数组时达到的 EOF)。

我的问题:该函数似乎没有抓住 eof 大小写,重用已经扫描的值。因此,例如,大小为 4 的数组的输入将数组填充为 。scanf12 2212 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;
}

我预计在第二次迭代后,应该在转换失败后返回,进入更大的块。此时应为 true,终止函数并打印错误消息。scanf0iffeof(stdin)

但是,似乎没有发生转换失败。scanf

IO EOF ANSI-C

评论

2赞 William Pursell 4/25/2019
当您点击文件末尾时,scanf 将返回 EOF。 计算结果为假,所以......!EOF
0赞 lurker 4/25/2019
您没有正确检查EOF的退货。所以你不能说它没有被检测到。请参阅 fscanf 的手册页。 绝对行不通。fscanfif(feof(stdin))

答: 暂无答案