当前位置:网站首页>016 C语言基础:C语言枚举类型
016 C语言基础:C语言枚举类型
2022-06-27 04:04:00 【入狱计划进度50%】
一:引入
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。
以每周七天为例,我们可以使用#define命令来给每天指定一个名字:
#include <stdio.h>
#define Mon 1
#define Tues 2
#define Wed 3
#define Thurs 4
#define Fri 5
#define Sat 6
#define Sun 7
int main(){
int day;
/* 补充知识点: scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf(“格式控制字符串”, 地址表列); 其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。 */
scanf("%d", &day);
switch(day){
case Mon: puts("Monday"); break;
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
case Thurs: puts("Thursday"); break;
case Fri: puts("Friday"); break;
case Sat: puts("Saturday"); break;
case Sun: puts("Sunday"); break;
default: puts("Error!");
}
return 0;
}
结果:
┌──(rootkali)-[~/Desktop/c_test]
└─# ./meiju
3
Wednesday
#define命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。
C语言提供了一种枚举(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。
二:枚举类型
枚举类型的定义形式为:
enum typeName{
valueName1, valueName2, valueName3, ...};
enum week{
Mon, Tues, Wed, Thurs, Fri, Sat, Sun}; 枚举默认从0开始,往后逐个加1
enum week{
Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sum = 7};
还有一种更为简单的方法是只给第一个名字指定值:enum week{
Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun};与上一行等效。
枚举是一种类型,通过它可以定义枚举变量,enum 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;
实例:
#include <stdio.h>
int main(){
enum week{
Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun} day;
scanf("%d", &day);
switch(day){
case Mon: puts("Monday");
break;
case Tues: puts("Tuesday");
break;
case Wed: puts("Wednesday");
break;
case Thurs: puts("Thursday");
break;
case Fri: puts("Friday");
break;
case Sat: puts("Saturday");
break;
case Sun: puts("Sunday");
break;
default: puts("error");
}
return 0;
}
结果:
┌──(rootkali)-[~/Desktop/c_test]
└─# ./meiju2
6
Saturday
需要注意的两点是:
枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的(严格来说是 main() 函数内部),不能再定义与它们名字相同的变量。
Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。
边栏推荐
- Semantic version 2.0.0
- 1.5 use of CONDA
- FastDDS的服务器记录-译-
- In a sense, the Internet has become an incubator and a parent
- Six possible challenges when practicing Devops
- Games101 job 7 improvement - implementation process of micro surface material
- Method of decoding iPhone certificate file
- Qchart note 2: add rollover display
- 【promise一】promise的介绍与手撸的关键问题
- How can e-commerce products be promoted and advertised on Zhihu?
猜你喜欢
Building lightweight target detection based on mobilenet-yolov4
Qchart note 2: add rollover display
2021:Check it again:Progressive Visual Question Answering via Visual Entailment通过视觉暗示进行渐进式视觉问答
Kotlin Compose compositionLocalOf 与 staticCompositionLocalOf
基于MobileNet-Yolov4搭建轻量化目标检测
jmeter将上一个请求的结果作为下一个请求的参数
Installation of low code development platform nocobase
Kotlin Compose 自定义 CompositionLocalProvider CompositionLocal
GAMES101作业7提高-微表面材质的实现过程
敏捷开发篇--Agile Development-自用
随机推荐
[array]bm94 rainwater connection problem - difficult
resnet152 辣椒病虫害图像识别1.0
通信中的机器学习最佳阅读资料列表
Pat grade a 1023 have fun with numbers
Baidu PaddlePaddle's "universal gravitation" first stop in 2022 landed in Suzhou, comprehensively launching the SME empowerment plan
解码苹果手机证书文件方法
WPF 开源控件库Extended WPF Toolkit介绍(经典)
1.5 conda的使用
[promise I] introduction of promise and key issues of hand rolling
A^2=E | 方程的解 | 这个方程究竟能告诉我们什么
2021:Graphhopper: Multi-Hop Scene Graph Reasoning for Visual Question Answering
IDEA中好用的插件
2019LXMERT:Learning Cross-Modality Encoder Representations from Transformers
MATLAB | 基于分块图布局的三纵坐标图绘制
2020:MUTANT: A Training Paradigm for Out-of-Distribution Generalizationin Visual Question Answering
[数组]BM94 接雨水问题-较难
快速掌握 ASP.NET 身份认证框架 Identity - 通过邮件重置密码
Why does C throw exceptions when accessing null fields?
fplan-布局
Is the money invested in financial products guaranteed? Is there no more?