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

C语言结构体ID输出异常求助:需实现1到5的有序索引输出

C语言结构体ID输出异常求助:需实现1到5的有序索引输出

兄弟,我瞅了瞅你这段C语言代码,问题还挺明显的,咱们一步步掰扯清楚,改完就能实现你要的有序输出1到5的ID需求啦:

先说说原代码的几个核心问题

  • GetEmployee函数啥也没干:你写的emp->ID[i];这行代码就是个空访问,根本没给ID数组的元素赋值,所以程序输出的都是内存里的随机垃圾值,自然乱得一批。
  • ShowEmployee的printf参数完全错了:printf里第一个%d是用来显示数组索引的,但你传的是emp->ID[i],这就把ID的值当成索引输出了,可不就乱套嘛。
  • main里的循环纯纯多余:你循环5次调用初始化和输出,每次初始化又啥也没做,结果就是重复输出5次同样的垃圾值,完全没必要。

改好后的完整代码

#include <stdio.h>

typedef struct Employee {
    int ID[5];
} Emp;

// 给ID数组赋值1到5
void GetEmployee(Emp *emp) {
    for (int i = 0; i < 5; i++) {
        // 让第i个元素的值是i+1,刚好对应1到5
        emp->ID[i] = i + 1;
    }
}

// 正确输出索引和对应ID值
void ShowEmployee(Emp *emp) {
    for (int i = 0; i < 5; i++) {
        // 如果你想索引从1开始显示(比如ID[1]=1),就把第一个参数改成i+1
        // 下面是索引从0开始的写法,按需调整就行
        printf("ID[%d] = %d\n", i, emp->ID[i]);
    }
}

int main(void) {
    Emp ab;
    // 只需要初始化一次ID数组
    GetEmployee(&ab);
    // 只需要输出一次就够了
    ShowEmployee(&ab);
    return 0;
}

改动说明

  1. 给GetEmployee补全赋值逻辑:通过emp->ID[i] = i + 1;把数组的5个元素依次设为1、2、3、4、5,完美匹配你要的ID从1到5的需求。
  2. 修正ShowEmployee的输出参数:把printf的第一个参数改成i(要1开始的索引就用i+1),这样就能正确显示数组的索引位置,第二个参数传emp->ID[i]对应的值,输出格式就完全正常了。
  3. 砍掉main里的多余循环:初始化一次、输出一次就搞定,循环多次纯属画蛇添足,还会导致重复输出。

如果你确实想要输出的索引是1到5(比如ID[1] = 1、ID[2] = 2……ID[5] = 5),只需要把ShowEmployee里的printf改成下面这样就行:

printf("ID[%d] = %d\n", i + 1, emp->ID[i]);

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:30:29