数组中的C-struct(以及一大堆其他问题)

数组中的C-struct(以及一大堆其他问题),c,arrays,struct,custom-data-type,C,Arrays,Struct,Custom Data Type,我是C语言的初学者。目前我正在学习C语言中的文件处理,我想创建一个简单的程序,可以读取文本文件并使用for循环输入内容 因为我的学习背景是Pascal,有时会让人很困惑,尤其是结构和数组的新规则和语法 这就是我的代码(缩写)的样子: typedef struct { char *name; char *age; } Person; void write_lines_to_terminal(Person person_array[], int numberOfLines) {

我是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);
 }
typedef结构{
字符*名称;
字符*年龄;
}人;
无效将行写入到终端(个人数组[],整数行){
对于(int i=0;i

根据我的帕斯卡逻辑,这应该是可行的。但很明显,我在->和*和周围犯了一大堆错误。我不明白。我试着在这里搜索答案,但对我来说没有意义

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

编辑:添加的人员定义

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

“我有一大堆错误”——>列出这些错误和任何错误消息。发布
my_string
的定义,a您能在
fscanf(文件ptr,“%d”和numberOfLines)之后显示
Person
struct的定义吗您需要阅读换行符才能进入下一行。编辑问题以添加请求的信息是可以的。编辑问题以显著更改某些代码是不正确的。它使所有的答案都无法处理代码的这些部分。
“%[^\n]\n%[^\n]\n”
之后“%d”
可能无法扫描任何内容。@Barmar在用您的建议修复我的代码后,所有错误都消失了,但程序在我尝试运行它时崩溃了…@Khang我敢打赌您的结构声明是错误的,但是你还没有发布它,所以我们不知道。我使用字符串是因为它在一个文本文件中,我正在从中读取所以
scanf()
可以将文本转换为整数。你显然知道这一点,因为你这样做是为了阅读
numberOfLines