You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:54:00