c - 为什么它只在最后一个循环点输出学生的信息?即第19个学生
问题描述
我想我正确地存储了内存
student *Class; // created an array of 19 total students
Class = (student *)malloc(sizeof(Class)* 19 );
//taking in the information for each student
Class->first = (char*)malloc(sizeof(char)* 19 );
Class->last = (char*)malloc(sizeof(char) * 19 );
Class->exam1 = (int)malloc(sizeof(int) * 19 );
Class->exam2 = (int)malloc(sizeof(int) * 19 );
Class->exam3 = (int)malloc(sizeof(int) * 19 );
在这个循环中,如果我更改“i <20;”,我只会看到第 19 个学生的信息。到“我 < 9;” 它只会输出第 8 个学生的信息。
for (i = 0; i < 20; i++) {
scanf("%s", Class->first);
scanf("%s", Class->last);
scanf("%d", &Class->exam1);
scanf("%d", &Class->exam2);
scanf("%d", &Class->exam3);
Class->mean = (Class->exam1 + Class->exam2 + Class->exam3) / 3;
} //
for (i = 0; i < 20; i++){
printf("%s %s %f \n", Class->first, Class->last, Class->mean);
}
这是学生结构的定义
typedef struct student_info {
char *first;
char *last;
int exam1;
int exam2;
int exam3;
float mean;
} student;
解决方案
除了评论中提到的所有附带问题......
在您的两个循环中,一个 withscanf()
和一个 with ,从不使用printf()
循环变量。
因此,您将所有信息扫描到同一个地方,然后从同一个地方打印 20 (9) 次。
您使用的“地方”非常可疑,您创建它的方式意味着您希望它类似于数组。但是如果不使用(或执行诸如迭代链表之类的操作),您就不能期望在几次相同的值之外得到任何东西。i
i
所以这就是为什么你只得到最后一个学生的输出。
该解决方案太复杂,无法在此处修复,至少没有 MRE 并且您可以遵循的方式进行修复。
涉及主题的关键字是“数组”、“数据类型”、“指针”、“结构数组”、“数组结构”、“循环”。
推荐阅读
- php - 是否可以在引导模型中包含 CSV 文件?
- ruby-on-rails - 在 Rails 中,我如何计算一个项目的使用次数?
- spring - 如何在 Spring-integration xml 中创建具有 WS-A 属性的请求
- java - 具有相同映射的两个请求
- python - 字母按字母顺序排列的可能子字符串列表。递归
- python - 如何访问 mininet 拓扑中创建的节点?
- c - C unix 中的文件配置、创建和使用
- scala - Scala:从 Runnable 返回
- javascript - 带有 formdata 的 Ajax 请求返回错误“请求实体太大”
- javascript - 为什么 Angular 文档建议在模块和组件级别导入?