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判断,或者像我这样用字符串数组。
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,应该怎么写
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语言枚举类型怎么使字符和相应的序号对应的主要内容,如果未能解决你的问题,请参考以下文章