c - 填充结构
问题描述
我正在尝试制作一个 C 程序,用户可以在其中将多个学生添加到列表中。这样做的目的是创建一个学生数据库(无需访问 .txt 文件,它只需要能够添加学生,然后在同一运行中按姓氏搜索特定学生,无需保存)。
struct student{
int semester;
char major[20];
char name[20];
};
struct person{
int id;
char surname[30];
struct student data;
}stud;
typedef struct person* st[10];
int m=0;
int add(){
printf("Type student's surname\n");
st[m]->surname=getchar(); //that's basically the part in which I need help
m=m+1;
}
虽然我认为我可以处理搜索,但我真的不知道如何进行添加部分。我想让它尽可能简单(我是大一新生)。我的意图是使用结构人员(其中嵌套了学生),然后每当用户调用函数add他们将能够添加一个学生(假设最大值为 10)。我的想法是制作 10 个结构 (struct[m]),每次调用函数add时 m 都会上升,但它似乎不像我预期的那样工作。
我怎样才能让它发生?任何帮助深表感谢。
解决方案
typedef struct person* st[10];
在这里,您不是在创建一个数组,而是在定义一个名为的类型,该类型st
可用于稍后声明一个大小为 10 的指针数组struct person
st[m]->surname=getchar();
因此,这部分不应作为st
类型编译。此外,如果您想在其中创建一个指针数组,您还必须使用malloc
(更多信息here)在堆上分配这些结构。
我建议您改为在堆栈上分配结构,您可以将typedef
行更改为:
struct person st[10];
推荐阅读
- javascript - 检查 null 不适用于 ajax json 数据
- javascript - 如何使用 React 存储消息?
- java - 使用坐标(纬度和经度)时如何计算线和点之间的垂直距离
- bitbucket - Bitbucket 服务器 - 隐藏审核日志
- javascript - Angular 6:错误类型错误:无法读取未定义的属性“toLowerCase”
- c# - ASP 主页面和内容页面
- javascript - 在 SignalR 的事件处理程序中访问属性时始终未定义
- html - 索引数据库存储
- mysql - Visual Basic 行/列不存在数据
- c# - 如何在没有 linq 且不更改原始列表的情况下将数据复制到另一个列表