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

如何打印嵌套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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:11:08