使用scanf未检测到EOF

使用scanf未检测到EOF,c,io,eof,ansi-c,C,Io,Eof,Ansi C,我创建了一个函数,它应该将一些整数从文件读取到数组中。该函数还应捕获没有足够整数填充数组的情况,并终止(即填充数组时达到EOF) 我的问题是:函数似乎没有捕捉到eof情况,因为scanf重用了已经扫描的值。因此,例如,大小为4的数组的输入12 22将作为12 22填充数组 int fillArray(int*array,int size){ int temp=0,i; 对于(i=0;i=0)){ if(feof(stdin)){ printf(“错误:没有足够的数字”);/*应为EOF*/ 返回

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

我的问题是:函数似乎没有捕捉到eof情况,因为
scanf
重用了已经扫描的值。因此,例如,大小为4的数组的输入
12 22
将作为
12 22
填充数组

int fillArray(int*array,int size){
int temp=0,i;
对于(i=0;i=0)){
if(feof(stdin)){
printf(“错误:没有足够的数字”);/*应为EOF*/
返回1;
}
printf(“错误:仅限正数”);
返回1;
}否则{
heapArray[i]=温度;
}
}
返回0;
}
我希望在第二次迭代后,
scanf
在转换失败后返回
0
,进入较大的
if
块。此时,
feof(stdin)
应为真,终止函数并打印错误消息


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

当您到达文件末尾时,scanf返回EOF<代码>!EOF的计算结果为false,因此…您没有正确检查EOF的返回。所以你不能说它没有被检测到。看<代码>如果(feof(stdin))肯定不起作用。当您到达文件末尾时,scanf返回EOF<代码>!EOF的计算结果为false,因此…您没有正确检查EOF的返回。所以你不能说它没有被检测到。看<代码>如果(feof(stdin))肯定不起作用。