C语言struct结构体声明问题:如何便捷批量声明etudiant类型学生变量
C语言批量管理学生变量解决方案
首先你原有的代码存在3个必须修正的错误:
scanf读取结构体成员时没有加取地址符&,会触发内存访问错误- 函数
saisie中返回局部数组T,局部数组存储在栈区,函数执行结束后内存会被系统回收,返回后访问会触发未定义行为 - 函数返回值类型为单个
etudiant结构体,和返回的结构体数组类型不匹配
要批量管理100个学生的信息,不需要逐个声明变量,直接使用结构体数组即可实现,以下是两种可直接使用的实现方案:
方案1:静态结构体数组(适合学生数量固定场景)
直接声明长度为100的etudiant类型数组,所有学生变量连续存储,通过下标即可访问任意学生的信息,代码示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ int CNE; }etudiant; // 传入数组指针和长度,直接在函数内完成录入 void saisie(etudiant *arr, int len) { for(int i = 0; i < len; i++){ printf("Le CNE du etudiant %d : ", i+1); scanf("%d", &arr[i].CNE); } } int main(){ // 批量声明100个学生变量,仅需一行代码 etudiant etudiants[100]; // 录入100个学生的信息 saisie(etudiants, 100); // 测试:打印前5个学生的CNE验证录入结果 for(int i = 0; i < 5; i++){ printf("Etudiant %d CNE : %d\n", i+1, etudiants[i].CNE); } return 0; }
方案2:动态内存分配(适合学生数量运行时确定场景)
如果学生数量需要在程序运行时才确定,不想预先申请固定大小的内存造成空间浪费,可以使用malloc动态申请对应数量的内存,使用结束后记得调用free释放内存避免泄漏,代码示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ int CNE; }etudiant; void saisie(etudiant *arr, int len) { for(int i = 0; i < len; i++){ printf("Le CNE du etudiant %d : ", i+1); scanf("%d", &arr[i].CNE); } } int main(){ int student_cnt = 100; // 动态申请指定数量的学生内存空间 etudiant *etudiants = (etudiant*)malloc(student_cnt * sizeof(etudiant)); // 内存申请失败校验 if(etudiants == NULL){ printf("内存申请失败,程序退出"); return 1; } saisie(etudiants, student_cnt); // 测试:打印前5个学生的CNE for(int i = 0; i < 5; i++){ printf("Etudiant %d CNE : %d\n", i+1, etudiants[i].CNE); } // 释放动态申请的内存 free(etudiants); etudiants = NULL; return 0; }
内容的提问来源于stack exchange,提问作者user14655248
相关产品推荐
相关产品推荐

