我使用fscanf解决了一个问题,其中说明了以下内容:
编写一个函数来初始化大小为SIZE的数组x,并使用从文本文件中读取的整数。该函数接收文件名作为参数。
解决方案陈述如下。为什么fscanf会返回一个值< 1,如果您正在扫描文件中的每个整数?不应该是> 0,因为fscanf返回扫描的元素数量?
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;
}
答案 0 :(得分:2)
您似乎误解了代码的意图:
for (i = 0; i < SIZE; i++)
{
if (fscanf (fp, "%d", &x[i]) < 1)
{
printf ("got %d numbers\n", i);
return;
}
}
如果fscanf
失败读取整数(它返回扫描的项目数),这将会返回。因此,此时,函数将返回(a)。
如果得到正整数,则表示您已成功读入该值,并且循环将继续。
(a)你可能应该break
而不是返回,因为文件没有像现在那样被关闭。
答案 1 :(得分:0)
为什么fscanf会返回一个值&lt; 1,如果您正在扫描文件中的每个整数?
1
返回:
int
时 int
代码循环读取其他0
EOF
EOF
(EOF
是一些负值)。
if (fscanf (fp, "%d", &x[i]) < 1)
输入错误(罕见)。
使用fastlane match
,分支被视为最后发生的3个条件之一 - 可能是文件结束。