C语言 变量怎么和枚举比较?

作者&投稿:昌滕 (若有异议请与网页底部的电邮联系)
C语言可以以字符形式输入枚举类型变量吗 输入后怎么比较呢 要不要强制转换~

字符形式指的是字符串?枚举类型是编译时就确定的,没法通过输入生成,当然可以写一个函数将字符转换为对应的枚举形式

是的,变量的值可以不连续,但必须不一样,C语言是这么规定的

枚举类型,其中的每个元素都是有int的值与之对应的。


可以看下下面的例子,刚写的:

#include<stdio.h>
#include<typeinfo.h>
enum Enu_exp{
first = 2,
second, //没有初始化值的话,就是first + 1
third //second +1
};
int main()

printf("%d
", Enu_exp::first);
printf("%d
", Enu_exp::second);
printf("%d
", Enu_exp::third);
printf("%d
", Enu_exp::second == 3);
}




枚举
(1) 在C编译中,对枚举元素按常量处理,故称枚举常量。它们不是变量,不能对它们赋值。
(2) 枚举元素作为常量,它们是有值的,C语言编译按定义时的顺序使它们的值为0,1,2.…
(3) 枚举值可以用来作判断比较。
(4) 一个整数不能直接赋给一个枚举变量。
变量
C语言变量- 变量是不过是一个名字到一个存储区域,。在C中的每一个变量有一个特定的类型,它决定了变量的存储器的大小和布局;的范围内的值,可以存储在该存储器内;和操作,可施加到可变组。

在实际问题中, 有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月, 一个班每周有六门课程等等。如果把这些量说明为整型, 字符型或其它类型显然是不妥当的。 为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是, 枚举类型是一种基本数据类型,而不是一种构造类型, 因为它不能再分解为任何基本类型。
枚举类型的定义和枚举变量的说明

一、枚举的定义枚举类型定义的一般形式为:
enum 枚举名
{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
例如: enum weekday
{ sun,mou,tue,wed,thu,fri,sat };
该枚举名为weekday,枚举值共有7个,即一周中的七天。 凡被说明为weekday类型变量的取值只能是七天中的某一天。

二、枚举变量的说明 如同结构和联合一样,枚举变量也可用不同的方式说明, 即先定义后说明,同时定义说明或直接说明。设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:
enum weekday
{
......
};
enum weekday a,b,c;或者为: enum weekday
{
......
}a,b,c;或者为: enum
{
......
}a,b,c;

枚举类型变量的赋值和使用

枚举类型在使用中有以下规定:
1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值: sun=5;mon=2;sun=mon; 都是错误的。

2. 枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1, …,sat值为6。
main(){
enum weekday
{ sun,mon,tue,wed,thu,fri,sat } a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
}
3. 只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如: a=sum;b=mon; 是正确的。而: a=0;b=1; 是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换,如: a=(enum weekday)2;其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: a=tue; 还应该说明的是枚举元素不是字符常量也不是字符串常量, 使用时不要加单、双引号。
main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++){
month[i]=j;
j++;
if (j>d) j=a;
}
for(i=1;i<=30;i++){
switch(month[i])
{
case a:printf(" %2d %c\t",i,'a'); break;
case b:printf(" %2d %c\t",i,'b'); break;
case c:printf(" %2d %c\t",i,'c'); break;
case d:printf(" %2d %c\t",i,'d'); break;
default:break;
}
}
printf("\n");
}


武昌区18656693975: 判断一个变量是不是在一个枚举类型里面的c语句怎么写 -
卷河咪喹: i am小白,尝试一下: typedef enum {data1=0,data2=1,data3=2 }_eTest; /**************************************************************************** * 函数: * 功能:检查输入值是否属于_eTest枚举,属于返回真,不属于返回假 * 参数: * 备注: ...

武昌区18656693975: 在C语言里,结构体类型变量和枚举类型变量有什么不同 -
卷河咪喹: 枚举, 是一系列值,每个都相当于一个整型常量. 枚举类型的变量 其实就是整型变量 结构体, 是一组数据的集合, 可以是不同类型 所以 二者没有什么相同的 唯一相同的 就是都属于自定义类型.

武昌区18656693975: 计算机C语言中的关键字:enum是什么意思? -
卷河咪喹: enum是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量说明为整型,字符型或其它类型...

武昌区18656693975: c语言中怎么将一个值与另外一个数组中的值进行比较 -
卷河咪喹: #include <stdio.h> int main() { char ch[]="Hello World!"; for (int i=0;ch[i]!='\0';i++) { if ('o'==ch[i]) { printf("N:%d\n",i+1);//搜索字符'o'都在第几个出现 } } return 0; }//按你的标题给你个例子,其它自己搞定!~

武昌区18656693975: C语言中的枚举函数有什么用呢?
卷河咪喹: 如果一个变量只有几种可能的值,就可以定义为枚举类型.枚举 就是将变量的值一一列举出来,变量的值只限于列举出来值的范围.声名枚举类型用enum开头.如enum number{1,2,3};就让number的值只能是1、2或3,其他是错误的.望采纳.

武昌区18656693975: enum在c语言中怎么用? -
卷河咪喹: C语言的枚举类型实质就是整型变量,只不过通过枚举类型将一类有关联的标识组合起来,增加程序的可读性和可维护性(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开. (2) DAY是一个标...

武昌区18656693975: c语言:输出枚举型变量的值,应该用什么格式说明 -
卷河咪喹: 在C语言中,枚举变量,即以enum关键字定义的变量,是按照整型或者无符号整型来处理的. 1 如果在枚举变量中,不存在负值,如 enum test {A, B,}; 这样的定义,系统会将该枚举变量按照无符号整型处理,即unsigned int 型.输出的时...

武昌区18656693975: 枚举和define有什么区别 -
卷河咪喹: 两者只有恨小的区别,在C语言中,枚举为整型,枚举常量为int型,因此它们都可以和其他整型类别混用而不会出错,而且枚举优点众多;能自动赋值;调试器在检验枚举变量时,可以显示符号值;服从数据块作用域规则.具体而言,两者的区...

武昌区18656693975: c语言中的布尔类型、枚举类型是个什么概念? -
卷河咪喹: 布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即"真"与"假". 布尔常量 在Pascal语言中"真"用ture表示,"假"用False表示.所以布尔类型只有TRUE与FALSE两个常量. C语言或C++的一种构造类型,它用于声明一组...

武昌区18656693975: c语言高效求一个数的约数和 -
卷河咪喹: 求解这个问题的算法是: 给出n后,枚举比他小的因子f,然后累加起来; 其中可以优化,并实现高效的是——枚举因子. 最简单的枚举因子是从[2, n-1]一个一个枚举; 但我们小学数学就学过“分解质因数”——将一个合数分解成一系列质数乘积的形式,这些单个的质数当然也是该数的因子,好像叫“质因子”,而其他因子可以看作是质因子序列中选出若干个的乘积. 如果真要“高效”,可以使用上面的思路.然后是,另外一个优化在“分解质因数”过程中.分解质因数,需要枚举质数,枚举质数最高效的是“打表法”——即先把需要的质数用程序算出了,写死到代码里(数组),下次就不用再计算了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网