首页 > 解决方案 > C - 数组中的结构(以及一大堆其他问题)

问题描述

我是 C 的初学者。目前我正在学习 C 中的文件处理,我想创建一个可以读取文本文件并使用 for 循环输入内容的简单程序。

因为我是在脑后学习 Pascal 背景的,所以有时这会让人很困惑,尤其是结构和数组的新规则和语法

这就是我的代码(缩短)的样子:

typedef struct {
    char *name;
    char *age;
} Person;
void write_lines_to_terminal(Person person_array[], int numberOfLines) {
   for (int i = 0; i < numberOfLines; i++)
    {
        printf("name: %s, age: %s\n", person_array[i].name, person_array[i].age);
    }
}

void read_lines_to_terminal(FILE *file_ptr) {
  my_string string;
  int i;
  int numberOfLines;
  fscanf(file_ptr, "%d", &numberOfLines);
  Person person_array[numberOfLines];
  for (i=0; i < numberOfLines; i++) {
    fscanf(file_ptr, "%[^\n]\n", person_array[i].name);
    fscanf(file_ptr, "%[^\n]\n", person_array[i].age);
  }
  write_lines_to_terminal(person_array, numberOfLines);
 }

根据我的帕斯卡逻辑,这应该可行。但显然我遇到了一大堆围绕 -> 和 * 和 . 我无法理解。我尝试在这里搜索答案,但它们对我来说没有意义......

对我的代码的任何帮助或建议将不胜感激。

编辑:添加人员定义

标签: carraysstructcustom-data-type

解决方案


fscanf()不返回读取的值,它返回成功读取的输入数。您必须提供指向位置的指针以将输入存储为参数。

fscanf(file_ptr, "%[^\n]\n%[^\n]\n", person_array[i].name, person_array[i].age);

在开始读取数据行之前,您还需要在行数之后读取换行符。将其更改为:

fscanf(file_ptr, "%d\n", &numberOfLines);

您的Person结构中有指针,但您从未分配任何内存供它们指向。相反,您应该使用数组:

typedef struct {
    char name[100];
    char age[4];
} Person;

我不确定您为什么使用字符串作为年龄而不是int.


推荐阅读