如何解决为什么这段代码只打印文件的第一行?
要求:
编写一个按顺序执行以下任务的 C 程序:
- 最初在执行窗口中显示文件的内容
- 向用户询问 ID,在文件中搜索 ID,然后以以下格式显示消息(在执行窗口中):Student with ID:………对应于………………。谁是主修……………… 在输出中打印学生姓名时,不要打印“_”!
问题: 它只输出文件的第一行(又名第一个学生信息),之后它甚至不要求提供学生 ID。
代码:
array(2) {
["apple"]=>
string(7) "uniqid3"
["bannana"]=>
string(7) "uniqid4"
}
解决方法
有几点:
-
main 应该返回 int
-
fscanf(info,"%d",&students[I].ID); // '&' 被遗漏了。
-
文件读取循环
for (i = 0; i
不好。
while(fgets(buff,sizeof(buff),infp)!=NULL){
}
应该会更好。该文件可能有更多或更少的行;
- 将 fscanf 与 get 结合起来并不好。请使用 fgets 读取行并使用 sscanf 或 strtok 获取字段。
您错过了此行中的 &
:
fscanf(infp,students[i].ID);
更改为:
fscanf(infp,&students[i].ID);
,
关于:
问题:它只输出文件的第一行(也就是第一个学生信息),之后它甚至不要求提供学生 ID。
感兴趣的代码是
printf("Enter an ID: ");
scanf("%d",&ID_to_search);
index = search_for_student(ID_to_search,students);
if (index == -101)
printf("Student not found!");
else {
printf("Student with ID: %d corresponds to %s %s who is majoring in %s.",students[index].ID,students[index].First_name,students[index].Last_name,students[index].major);
}
} // end if/else,not the end of a `for() loop
注意上面的代码是'else'代码块的结尾,不是for()
循环的一部分,所以只会执行一次
此外,如果输入的学生少于 22 人,调用 fscanf()
将返回 EOF 而不是更新任何学生信息。您确定输入文件实际上包含 22 个学生信息实例吗?它甚至包含超过 1 个学生信息实例吗?
而不是使用 22 的硬编码计数,用于:
for (i = 0; i < 22; i++)
{
fscanf(infp,students[i].ID);
建议使用第一次调用 fscanf()
的返回值,类似于:
i = 0;
while( fscanf(infp,students[i].ID) != EOF )
{
....
i++;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。