You need to enable JavaScript to run this app. C/C++结构体动态数组传参实现及代码报错求助
优惠活动
大模型
产品
解决方案
定价
更多

C/C++结构体动态数组传参实现及代码报错求助

代码问题排查与修正

核心错误点

  • 语法错误:struct Employee 结构体定义的结束大括号后缺少分号,会直接阻断编译流程。
  • 成员定义不合理:Name 成员被定义为单个char类型,无法存储常规人名长度的字符串,应修改为定长字符数组(如char Name[50])。
  • 输入缓冲区错位:连续调用scanf时,前一次输入残留的换行符会被后续读取单字符的scanf("%c")直接捕获,导致所有输入值错位,无法正确读取员工信息。
  • 动态内存使用不规范:malloc申请的内存未做空指针校验,若申请失败直接访问数组元素会触发段错误;程序退出前未释放动态申请的内存,存在内存泄漏。

修正后可运行代码

#include <stdio.h>
#include <stdlib.h>

#define NAME_LEN 50

struct Employee {
    int Id;
    char Name[NAME_LEN];
    int Degree;
    int Age;
};

void inputFun(struct Employee * EmpArr, int empNum);
void printFun(struct Employee * EmpArr, int empNum);

int main()
{
    int empNum;
    printf("Hello, Specify the Number of Employees Please\n");
    scanf("%d", &empNum);
    
    struct Employee * MyEmpArr = (struct Employee *)malloc(empNum * sizeof(struct Employee));
    if (MyEmpArr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }
    
    inputFun(MyEmpArr, empNum);
    printf("\n");
    printFun(MyEmpArr, empNum);
    
    free(MyEmpArr);
    return 0;
}

void inputFun(struct Employee * EmpArr, int empNum){
   for(int i = 0; i < empNum; i++ ){
        printf("\nEnter details of Employee %d\n\n", i+1);

        printf("Id: ");
        scanf("%d", &EmpArr[i].Id);

        // 清理输入缓冲区残留的换行符
        while(getchar() != '\n');
        printf("Name: ");
        scanf("%s", EmpArr[i].Name);

        printf("Degree: ");
        scanf("%d", &EmpArr[i].Degree);
        
        printf("Age: ");
        scanf("%d", &EmpArr[i].Age);
        while(getchar() != '\n');
    }
}

void printFun(struct Employee * EmpArr, int empNum){
    printf("Employee details are: \n");
    for(int i = 0; i < empNum; i++ )
        printf("%d\t%s\t%d\t%d\n", EmpArr[i].Id, EmpArr[i].Name, EmpArr[i].Degree, EmpArr[i].Age);
}

代码说明:通过缓冲区清理逻辑解决连续scanf的输入错位问题,用字符串读取逻辑适配姓名成员的定义,补充内存校验与释放逻辑,完全匹配作业要求的“动态结构体数组+输入/打印双函数”的实现框架。


内容的提问来源于stack exchange,提问作者Shahd yousef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 10:06:05