有人给我一个使用 fscanf 来解决的问题,其中指出了以下内容:
编写一个函数,用从文本文件读取的整数来初始化大小为 SIZE 的数组 x。该函数接收文件名作为参数。
解决方案如下所述。如果您扫描文件中的每个整数,为什么 fscanf 返回值 < 1?由于 fscanf 返回扫描的元素数量,它不应该 > 0 吗?
void init (char *name)
{
FILE *fp;
int i;
fp = fopen (name, "r");
if (fp == NULL)
{
printf ("no file\n");
return;
}
for (i = 0; i < SIZE; i++)
{
if (fscanf (fp, "%d", &x[i]) < 1)
{
printf ("got %d numbers\n", i);
return;
}
}
fclose (fp);
return;
}
最佳答案
您似乎误解了代码的意图:
for (i = 0; i < SIZE; i++)
{
if (fscanf (fp, "%d", &x[i]) < 1)
{
printf ("got %d numbers\n", i);
return;
}
}
如果fscanf
未能读取整数,则返回(它返回扫描的项目数)。因此,此时该函数将返回(a)。
如果你得到一个正整数,这意味着你成功读入该值并且循环将继续。
<小时/>(a) 您可能应该在此处break
而不是返回,因为文件并未按目前的方式关闭。
关于c - 为什么要检查函数中 fscanf 返回值 < 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47067938/