如何打印嵌套C结构体全部内容?现有代码仅输出首个条目
问题分析与解决方案
你的代码存在三个核心问题,导致无法打印所有员工条目:
1. 嵌套结构体初始化错误
struct Employee包含name、age等多个字段,你直接传入字符串的初始化方式,会把第一个字符串赋值给第一个员工的name,后续字符串会被错误解析为该员工的其他字段(比如age),而非作为新的员工实例。正确的做法是每个员工都用{}包裹,明确是一个独立的struct Employee对象。
2. 未记录经理管理的员工数量
Manager结构体中的index字段未初始化,打印时无法确定需要遍历多少个员工条目。
3. 员工打印逻辑错误
直接用%s打印managed数组,只会输出第一个员工的name(数组名退化为指向第一个Employee的指针,%s会读取该对象的name字段),而非遍历所有员工。
修正后的代码
#include <stdio.h> #include <string.h> #include <stdlib.h> struct Employee { char name[30]; int age; int salary; int yrsWorked; char jobTitle[40]; }; struct Manager { char name[30]; int age; int salary; struct Employee managed[20]; int index; // 记录管理的员工总数 }; void print_managerK(struct Manager str_arrK[]) { int k, i; for(k= 0; k<2; k++) { printf("Manager Name: %s\n", str_arrK[k].name); printf("Age: %d\n", str_arrK[k].age); printf("Salary: %d\n", str_arrK[k].salary); printf("Employees Managed:\n"); // 根据index遍历所有有效员工 for(i = 0; i < str_arrK[k].index; i++){ printf(" - %s\n", str_arrK[k].managed[i].name); // 如需打印员工其他字段,可在此扩展 // printf(" Age: %d, Salary: %d\n", str_arrK[k].managed[i].age, str_arrK[k].managed[i].salary); } printf("\n"); } } int main(void){ struct Manager managerDetails[2] = { // Olivia管理2个员工,index设为2 {"Olivia", 52, 150000, {{"John"}, {"George"}}, 2}, // Vincent管理1个员工,index设为1 {"Vincent", 42, 160000, {{"Lucy"}}, 1}, }; print_managerK(managerDetails); return 0; }
关键修改说明
- 初始化
Manager时,每个员工用{"员工名"}包裹(未指定的字段会默认初始化为0),同时设置index为实际管理的员工数量。 - 打印函数中添加内层循环,依据
index值遍历所有员工,逐个输出信息。 - 调整输出格式,让结果结构更清晰易读。
内容的提问来源于stack exchange,提问作者code123
相关产品推荐
相关产品推荐

