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

C语言员工信息程序异常:输入正常但输出全为0求助

问题解决:打印员工信息全为0的原因及修复

核心问题:input()函数未返回结构体实例

你的input函数声明为返回struct employee类型,但函数内部没有添加return e;语句。在C语言中,这种情况会触发未定义行为,main函数中接收的emp[i]会是随机的垃圾数据,表现为打印时数值全为0。

次要问题优化(不影响核心功能,但提升程序可用性)

  • display函数的打印语句缺少换行符,所有员工信息会挤在同一行,需添加\n
  • scanf("%s", &e.name);中e.name是数组首地址,无需取地址符&,改为scanf("%s", e.name);更规范
  • 输入日期时,若用户未按dd/mm/yyyy格式输入,会导致后续输入异常,可在提示中明确输入格式

修正后的完整代码

#include <stdio.h>

struct employee
{
    int empId;
    char name[20];
    char empType[10];
    int dd, mm, yyyy;
};

struct employee input()
{
    struct employee e;

    printf("Enter Employee ID: \n");
    scanf("%d", &e.empId);

    printf("Enter Employee name: \n");
    scanf("%s", e.name);

    printf("Enter employee type: \n");
    scanf("%s", e.empType);

    printf("Enter joining date (dd/mm/yyyy): \n");
    scanf("%d/%d/%d", &e.dd, &e.mm, &e.yyyy);

    return e;
}

void display(struct employee emp[], int n)
{
    printf("Employee ID \t Name \t Employee Type \t Joining date\n");
    int i;
    for (i = 0; i < n; i++)
    {
         printf("%d \t %s \t %s \t %d/%d/%d\n", emp[i].empId, emp[i].name, emp[i].empType, emp[i].dd, emp[i].mm, emp[i].yyyy);
    }
}

int main()
{
    int n = 5;

    struct employee emp[n];

    int i;
    for(i = 0; i < n ;i++)
    {
         printf("Enter details for employee %d:\n", i+1);
         emp[i] = input();
    }

    printf("\n--- Employee Details ---\n");
    display(emp, n);

    return 0;
}

内容的提问来源于stack exchange,提问作者DHEERAJ SWAROOP S M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:51:01