C语言中无法在for循环中用枚举为结构体赋值的问题求助
问题分析与解决
错误原因
你代码里的核心问题是把枚举类型当成数组来用了。C语言中,kuloer和vaerdi是枚举类型的别名,不是数组,不能用kuloer[i % 4]这种数组下标语法去访问枚举值。枚举本质是整数常量集合,默认从0开始依次赋值(比如spar=0,kloer=1,以此类推),但类型本身不具备数组的存储和访问能力。
另外还有两个小问题:
- 结构体数组和结构体同名
kort,这会导致编译歧义,建议重命名数组 printf里用%c输出枚举值是错误的,枚举值是整数,不是字符,要么用%d输出整数值,要么准备对应的字符串数组输出枚举的名称
修正后的代码
#include <stdio.h> typedef enum kuloer {spar, kloer, rudder, hjerte} kuloer; typedef enum vaerdi {one, two, three, four, five, six, seven, eight, nine, ten, knaegt, dronning, konge} vaerdi; // 枚举值对应的字符串,用于输出 const char* kuloer_names[] = {"spar", "kloer", "rudder", "hjerte"}; const char* vaerdi_names[] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "knaegt", "dronning", "konge"}; typedef struct kort { kuloer k; vaerdi v; } kort; int main(void){ int i; // 数组名和结构体名区分开,避免歧义 kort kort_array[52]; for (i = 0; i < 52; i++) { // 枚举本质是整数,直接用计算后的整数赋值即可 kort_array[i].k = i % 4; kort_array[i].v = i % 13; // 输出枚举对应的名称 printf("Kort %d: %s ", i , kuloer_names[kort_array[i].k]); printf("%s\n", vaerdi_names[kort_array[i].v]); } return 0; }
补充说明
如果想要更直观地用枚举常量赋值,可以先定义枚举值数组:
// 提前定义存储枚举常量的数组 kuloer kuloer_values[] = {spar, kloer, rudder, hjerte}; vaerdi vaerdi_values[] = {one, two, three, four, five, six, seven, eight, nine, ten, knaegt, dronning, konge}; // 循环中通过数组下标取枚举常量赋值 kort_array[i].k = kuloer_values[i % 4]; kort_array[i].v = vaerdi_values[i % 13];
这种写法更贴合枚举类型的使用逻辑,可读性更强。
内容的提问来源于stack exchange,提问作者Wolo
相关产品推荐
相关产品推荐

