微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这段代码只打印文件的第一行?

如何解决为什么这段代码只打印文件的第一行?

要求:

编写一个按顺序执行以下任务的 C 程序:

  • 最初在执行窗口中显示文件内容
  • 用户询问 ID,在文件搜索 ID,然后以以下格式显示消息(在执行窗口中):Student with ID:………对应于………………。谁是主修……………… 在输出中打印学生姓名时,不要打印“_”!

问题: 它只输出文件的第一行(又名第一个学生信息),之后它甚至不要求提供学生 ID。

代码

array(2) {
  ["apple"]=>
  string(7) "uniqid3"
  ["bannana"]=>
  string(7) "uniqid4"
}

解决方法

有几点:

  1. main 应该返回 int

  2. fscanf(info,"%d",&students[I].ID); // '&' 被遗漏了。

  3. 文件读取循环

    for (i = 0; i

不好。

while(fgets(buff,sizeof(buff),infp)!=NULL){
}

应该会更好。该文件可能有更多或更少的行;

  1. 将 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 举报,一经查实,本站将立刻删除。