首页 > 编程知识 正文

c语言枚举常量,字符串大小写转换c语言

时间:2023-05-06 13:02:58 阅读:126949 作者:1703

在实际编程中,一些数据的取值往往有限,只能是非常少量的整数。 另外,为了便于在后续代码中使用,最好对各值进行命名,例如一周只有7天、一年只有12个月、一个班每周有6个课程等。

以每周7天为例,可以使用#define命令每天指定名称。

#包含

#define Mon 1

#define Tues 2

#定义wed 3

#define Thurs 4

#定义fri 5

#define Sat 6

#define Sun 7

int main () )。

int day;

扫描(“% d”,日期);

交换机(天) {

casemon:puts(Monday ); 布雷克;

casetues:puts(Tuesday ); 布雷克;

案例wed : puts (Wednesday ); 布雷克;

casethurs:puts(Thursday ); 布雷克;

casefri:puts(Friday ); 布雷克;

casesat:puts(Saturday ); 布雷克;

casesun:puts(Sunday ); 布雷克;

默认: puts (' error!' );

}

返回0;

}

执行结果:

5

弗雷迪

#define命令可以解决问题,但会带来不小的副作用,宏名称太多,代码松散,总觉得不舒服。 c语言提供枚举枚举枚举枚举类型,它列出并命名所有可能的值。

枚举类型的定义格式如下:

枚举类型名称{ value name 1,valueName2,valueName3,…};

enum是用于定义枚举类型的新关键字,这是c语言中的唯一目的。 typeName是枚举类型的名称; valueName1、valueName2、valueName3、是与每个值对应的名称列表。 注意最后一点; 不能少。

例如,列出一周有几天。

enum week{ Mon,Tues,Wed,Thurs,Fri,Sat,Sun };

您可以看到只给定了名称,而没有给定与名称对应的值。 这是因为枚举值默认从0开始,然后递增1。 也就是说,与week的Mon、tues……sun对应的值分别为0、1……6。

也可以为每个名称指定值。

enum week{ Mon=1,Tues=2,Wed=3,Thurs=4,Fri=5,Sat=6,Sun=7 };

更简单的方法是只为第一个名称赋值。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun };

这样,枚举值从1开始递增,与上面的写法等价。

枚举是一种可以定义枚举变量的类型。

枚举week a、b、c;

也可以在枚举类型的同时定义变量。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun } a,b,c;

如果存在枚举变量,则可以分配列表中的值。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun };

enum week a=Mon,b=Wed,c=Sat;

或:

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun } a=Mon,b=Wed,c=Sat;

判断用户输入了星期几。

#包含

int main () )。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun } day;

扫描(“% d”,日期);

交换机(天) {

casemon:puts(Monday ); 布雷克;

casetues:puts(Tuesday ); 布雷克;

案例wed : puts (Wednesday ); 布雷克;

casethurs:puts(Thursday ); 布雷克;

casefri:puts(Friday ); 布雷克;

cas

e Sat: puts("Saturday"); break;

case Sun: puts("Sunday"); break;

default: puts("Error!");

}

return 0;

}

运行结果:

4↙

Thursday

需要注意的两点是:

1 枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的(严格来说是 main() 函数内部),不能再定义与它们名字相同的变量。

2 Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。

枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。

对于上面的代码,在编译的某个时刻会变成类似下面的样子:

#include

int main(){

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;

scanf("%d", &day);

switch(day){

case 1: puts("Monday"); break;

case 2: puts("Tuesday"); break;

case 3: puts("Wednesday"); break;

case 4: puts("Thursday"); break;

case 5: puts("Friday"); break;

case 6: puts("Saturday"); break;

case 7: puts("Sunday"); break;

default: puts("Error!");

}

return 0;

}

Mon、Tues、Wed 这些名字都被替换成了对应的数字。这意味着,Mon、Tues、Wed 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址。这就是枚举的本质。

我们知道,case 关键字后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量,正是由于 Mon、Tues、Wed 这些名字最终会被替换成一个整数,所以它们才能放在 case 后面。

枚举类型变量需要存放的是一个整数,我猜测它的长度和 int 应该相同,下面来验证一下:

#include

int main(){

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day = Mon;

printf("%d, %d, %d, %d, %dn", sizeof(enum week), sizeof(day), sizeof(Mon), sizeof(Wed), sizeof(int) );

return 0;

}

运行结果:

4, 4, 4, 4, 4

深入理解Java枚举类型(enum)

https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...

枚举类型enum详解——C语言

enum enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值的集合(这句话其实不太妥当),枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶 ...

[编程] C语言枚举类型(Enum)

C语言枚举类型(Enum):定义形式为:enum typeName{ valueName1, valueName2, valueName3, ...... };enum 类型名{名字1,名字2} 枚举 ...

【转】java枚举类型enum的使用

原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

C# 中的枚举类型 enum (属于值类型)

原文 C# 中的枚举类型 enum (属于值类型) C# 支持两种特殊的值类型:枚举和结构. 声明枚举:声明时要声明所有可能的值. using System; using System.Collect ...

人生苦短之Python枚举类型enum

枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用.当一个变量有几种可能的取值的时候,我们将它定义为枚举类型.在Python ...

全面解读Java中的枚举类型enum的使用

这篇文章主要介绍了Java中的枚举类型enum的使用,开始之前先讲解了枚举的用处,然后还举了枚举在操作数据库时的实例,需要的朋友可以参考下 关于枚举 大多数地方写的枚举都是给一个枚举然后例子就开始sw ...

Java基础之枚举类型Enum的使用

Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...

《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

随机推荐

【Mail】搭建邮件服务器(LAMP+Postfix+Dovcot+PostfixAdmin+Roundcubemail)

大纲 一.mail部署说明 二.安装准备 三.LMAP环境配置 四.配置postfixadmin 五.配置postfix 六.配置dovecot 七.测试SMTP和POP3服务 八.配置Roundcu ...

bug的处理流程

又属于一篇普及文,希望自己在被各种技术吸引的同时,能时常来整理和总结软件测试最基本的知识. 从刚工作时接触的第一个缺陷管理工具禅道,到redmine.JIRA.bugzilla ,再到现在的QC,当然 ...

node.js(五)字符串转换

1.stringify函数的基本用法 stringify函数的作用就是序列化对象,也就是说将对象类型转换成一个字符串类型(默认的分割符("&")和分配符("=&q ...

Spring Boot Starter 介绍

http://www.baeldung.com/spring-boot-starters 作者:baeldung 译者:http://oopsguy.com 1.概述 依赖管理是任何复杂项目的关键部分 ...

POJ-2993 Emag eht htiw Em Pleh---棋盘模拟

题目链接: https://vjudge.net/problem/POJ-2993 题目大意: 输入和输出和这里相反. 思路: 模拟题,没啥算法,直接模拟,不过为了代码精简,还是花了一点心思的 #in ...

android 手机权限管理——PermissionsDispatcher

Android6.0 之后某些权限需要动态申请,相比于之前版本复杂了许多.不过已经有大神给我们写好了框架(PermissionsDispatcher),我们用起来还是很方便. 1.添加引用 根据 gr ...

swift static func 和 class func

Swift中static func 相当于class final func.禁止这个方法被重写 clas func  可以被继承重写

delphi 中record 的类操作符重载简介

今天简单介绍一下 delphi 中record 的类操作符重载使用,就是如何 实现 record 之间的简单操作. 关于类操作符重载 ,大家可以看官方的文档. Delphi allows certai ...

[Object Tracking] How to learn Active contour model - Snake Model

常见四种跟踪的思路: 区域:人体肢体识别.跟踪 模型:人体面部识别.跟踪 特征:摄像头3D定位 主动轮廓:(蛇模型属于这er,数学基础,也是最流行的一个目前) ...

bzoj3252: 攻略(贪心)

/* 因为权值都是正的, 所以贪心的正确性能保证 然后重链贪心跑一下就好了 */ #include #include #include&l ...

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。