c - 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);
}
根据我的帕斯卡逻辑,这应该可行。但显然我遇到了一大堆围绕 -> 和 * 和 . 我无法理解。我尝试在这里搜索答案,但它们对我来说没有意义......
对我的代码的任何帮助或建议将不胜感激。
编辑:添加人员定义
解决方案
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
.
推荐阅读
- swift - Swift - 当 UITextField 是带有 UIColor.init 和 isSecureText 的 IBDesignable 时冻结
- php - WooCommerce 中 wp_set_password 函数的等价物是什么?
- c++ - 在这个输出中 7 是正确答案而不是 6
- r - ggplot 直方图 颜色渐变
- symbols - Windbg 中 sympath 命令之间的区别
- python-3.x - 在 Python 3.x 中拒绝字母并且只允许输入数字 @ 输入第一个和第二个数字
- android - 被拒绝的应用程序问题:违反权限政策
- python - 序列化器:自定义嵌套关系
- python - 如何获得 n(n-1)(n-2) / 6 的结果
- c - 在我的 c 程序中无法理解“警告 C4090:'=':不同的 'const' 限定符”