C语言枚举类型怎么使字符和相应的序号对应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言枚举类型怎么使字符和相应的序号对应相关的知识,希望对你有一定的参考价值。

例如:定义一个枚举类型enum weekday mon,tue,wed,tru,fri,sat,sun
我想输入一个1-7的整数,程序对应输出相对的星期几简写。
该如何实现?

关于“我想输入一个1-7的整数,程序对应输出相对的星期几简写。” 这个需求不需要用枚举,比如搞个字符串数组:

#include <stdio.h>

int main() 
    const char *weekdayStrings[] = "mon", "tue", "wed", "thu", "fri", "sat", "sun";
    int weekdayNum = 0;
    printf("input weekday (1-7): ");
    scanf("%d", &weekdayNum);
    if (weekdayNum < 1 || weekdayNum > 7) 
        printf("wrong input\\n");
        return -1;
    
    printf("weekday: %s\\n", weekdayStrings[weekdayNum-1]);
    return 0;

如果你想通过枚举值得到枚举名字,这个c语言做不到,只能用switch-case或者if-else判断,或者像我这样用字符串数组。

参考技术A 输入一个1-7的整数,程序对应输出相对的星期几简写 这与定义枚举没有关系!可以利用指针数组来实现!

int main()

char *weekday[]=
"mon","tue","wed","thu","fri","sat","sun" ;
int day=0;
scanf("%d", &day);
if ( day>7 || day<1 )


printf("error!!!\n");
return -1;

printf("%s\n", weekday[day-1] );
return 0;
追问

这样我也会啦,我就是想知道有没有枚举类型和数值相联系的方法。

追答

没有

参考技术B mon = 1; tue = 2; wed...............
像这样手动赋值就行追问

能否帮忙写个完整程序

追答

自己动动手不就写出来了呀。。。

追问

用 switch case吗?对应一个个输出?

追答

也可以啊,根据你自己的思路做下去就可以了,不行的话自己多调试一下就可以了,没必要来问的。学会独立思考与面对错误才是好的学习方法

追问

嗯 要单做出这道题肯定没问题,我就是想了解有没有枚举直接和其序数对应的操作指令,目前还没找到。

追答

枚举说白了就是集合了,序数的话应该会有下标(如:数组),枚举不会有这种东西的。。。

c语言:输出枚举型变量的值,应该用啥格式说明

例如: enum colorred,green,blue,white;
enum color type;
int i=1;
type=(enum color)i;
此时如果要用printf输出type的值green,应该怎么写

在C语言中,枚举变量,即以enum关键字定义的变量,是按照整型或者无符号整型来处理的。
1 如果在枚举变量中,不存在负值,如
enum test

A,

B,

;
这样的定义,系统会将该枚举变量按照无符号整型处理,即unsigned int 型。输出的时候使用%u格式即可。
enum test t = A;
printf("%u", t);

2 如果在枚举变量中存在负值,那么系统按整型处理,即int型。如定义
enum test

A=-199,

B,

;
输出时,需要用%d格式:
enum test t = A;
printf("%d", t);

3 由于枚举变量在书写时,一般不会太大,很少有在没有负数的时候,即按照无符号数处理的时候超出有符号数所能表示的正数范围,即一般不会把最高位置一,所以大多数情况下,用%d输出都是没问题的。
参考技术A enum其实是用字符串来标志一些值(也就是枚举值)
只是从值的大小来考虑的话,
enum colorred,green,blue,white;
类似于:
#define red 0
#define green 1
#define blue 2
#define white 3
只不过这些宏定义都是属于color这个统一的类型的(枚举型)

所以想通过值来逆推出枚举的枚举元素名来。

如果一定要输出的话,只能这么做了:
switch((enum color)i)

case 0: printf("red\n");break;
case 1: printf("green\n");break;
case 2: printf("blue\n");break;
case 3: printf("white\n");break;
default: break;
本回答被提问者采纳
参考技术B printf("%d", type)或者printf("%d", green), 只会输出1. 想输出green这5个字符是不可能的.

如果在调试器里观察type, 一般会显示green

不存在其他格式控制符能输出green这5个字符.
参考技术C 不用这么麻烦吧,直接输出
printf("%d",green);就醒了

以上是关于C语言枚举类型怎么使字符和相应的序号对应的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的枚举型啥意思

C语言中如何控制枚举类型占用空间的大小

C语言中的枚举类型有啥用么?

c#中怎样定义枚举?

C语言枚举类型是啥意思?

c语言:输出枚举型变量的值,应该用啥格式说明