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; }
改动说明
- 给GetEmployee补全赋值逻辑:通过
emp->ID[i] = i + 1;把数组的5个元素依次设为1、2、3、4、5,完美匹配你要的ID从1到5的需求。 - 修正ShowEmployee的输出参数:把printf的第一个参数改成
i(要1开始的索引就用i+1),这样就能正确显示数组的索引位置,第二个参数传emp->ID[i]对应的值,输出格式就完全正常了。 - 砍掉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
相关产品推荐
相关产品推荐

