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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:35:18