C语言员工信息程序异常:输入正常但输出全为0求助
问题解决:打印员工信息全为0的原因及修复
核心问题:input()函数未返回结构体实例
你的input函数声明为返回struct employee类型,但函数内部没有添加return e;语句。在C语言中,这种情况会触发未定义行为,main函数中接收的emp[i]会是随机的垃圾数据,表现为打印时数值全为0。
次要问题优化(不影响核心功能,但提升程序可用性)
display函数的打印语句缺少换行符,所有员工信息会挤在同一行,需添加\nscanf("%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
相关产品推荐
相关产品推荐

