数组中的C-struct(以及一大堆其他问题)
我是C语言的初学者。目前我正在学习C语言中的文件处理,我想创建一个简单的程序,可以读取文本文件并使用for循环输入内容 因为我的学习背景是Pascal,有时会让人很困惑,尤其是结构和数组的新规则和语法 这就是我的代码(缩写)的样子:数组中的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) {
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
。