C语言如何将scanf输入的字符正确赋值给enum枚举变量
C语言枚举类型优先级输入问题解决方案
核心问题在于C语言的枚举值本质是整数常量,和输入的字符字面量没有内置映射关系,直接赋值会直接把ASCII码赋给枚举变量,需要手动补充转换逻辑。
具体实现步骤
- 先通过
scanf读取字符类型的输入,不要直接传入枚举变量作为接收参数,避免格式符不匹配警告 - 增加字符到枚举值的映射判断逻辑,把输入的字符匹配到对应的枚举值后再赋值给枚举变量
- 可补充非法输入的兜底处理,避免未定义行为
修正后代码示例
#include <stdio.h> int main() { enum priority { L , l, n, h, H // 优先级对应值:L=0、l=1、n=2、h=3、H=4 }; char option = 'X'; printf("Priority: "); scanf(" %c", &option); enum priority priorityvar; // 手动做字符到枚举值的映射 switch(option) { case 'L': priorityvar = L; break; case 'l': priorityvar = l; break; case 'n': priorityvar = n; break; case 'h': priorityvar = h; break; case 'H': priorityvar = H; break; default: // 非法输入可自行处理,比如默认设为最低优先级,或者提示报错 printf("非法输入,默认设为最低优先级\n"); priorityvar = L; } printf("%d", priorityvar); return 0; }
补充说明
如果作业允许枚举值和字符ASCII码对齐,也可以直接给枚举项赋值为对应字符的ASCII码,比如enum priority { L = 'L', l = 'l', n = 'n', h = 'h', H = 'H' };,但这种方式无法得到0-4的优先级数值,不符合需求,因此手动映射是最稳妥的实现方式。
内容的提问来源于stack exchange,提问作者user15967184
相关产品推荐
相关产品推荐

