c - 结构程序未按预期工作(错误)

标签 c file structure

我一直在努力从文件中读取数据,该文件包含格式为学生姓名和年龄的数据:

约翰

12

13

Julia

18

这是我写的程序:

  #include <stdio.h>
    #include <stdlib.h>
    struct record{
        char name[50];
        int age;
    };
    int main(){
        FILE *fp;
        fp=fopen("sample2.txt","r");
        struct record a[50];
        int counter=1;
        int i=0;
        while (!EOF){
        if (counter%2!=0){
            fgets(a[i].name,50,fp);
            counter++;
        }
        if (counter%2==0){
            a[i].age=getw(fp);
            counter++;
            i++;
        }
    }
    return 0;
    }

但是,在打印 a[0].name 时,我没有得到预期的输出。有人可以帮忙吗?

最佳答案

正如评论中已经指出的那样,EOF 是一个在 stdio.h 中定义的值,并且没有说明任何关于您的文件描述符的信息。我还建议您使用 fscanf(只要您确定文件中的名称的长度都是正确的)。 fscanf 采用类似于 printf 的字符串,指定您期望的元素并返回可能的匹配项数。它还可以帮助您将数据转换为正确的数据类型。所以代码可能看起来像这样:

#include <stdio.h>
#include <stdlib.h>
struct record
{
  char name[50];
  int age;
};

int main ()
{
  FILE *fp;
  fp = fopen ("sample2.txt", "r");
  struct record a[50];
  int i = 0;
  while (fscanf(fp, "%s\n%d\n", (char *) a[i].name, &a[i].age) > 0) {
    i++;
  }
  printf("%s %d\n", a[1].name, a[1].age);
  return 0;
} 

关于c - 结构程序未按预期工作(错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65970898/

相关文章:

C:程序即使在释放结构后仍打印垃圾文本

c - 有没有办法编写一个带有变量参数的 C 预处理器宏?

android - MultipartBody.Part上传文件

java - 如何使用java以位方式保存文件?

c - 什么是结构中的内存泄漏?我们该如何纠正呢?

c - 错误 : expected identifier or ‘(’ before, 宏定义

c - 陷入一种循环

java - 浏览器下载完成事件

c++ - 内部类访问外部类

c - 在程序中使用 typedef