枚举变量保存符号
有时你不想保存数字或文本,而是想保存一组符号。如果你想记录一周中的某一天,只想保存 MON-DAY、TUESDAY、WEDNESDAY……这些符号。你不需要保存文本,因为一共只有七种不同的取值。
这就是为什么要发明枚举的原因。
有了枚举,就可以创建一组这样的符号:
用
enum colors 类型定义的变量只能设为列表中的某个关键字。可以像下面这样定义 enum colors 变量:enum colors favorite = PUCE;
在幕后,计算机会为列表中的每个符号分配一个数字,枚举变量中也只保存数字。至于是什么数字,你完全不用操心,C 程序员只要在代码中写符号就行了。枚举不仅让代码更易于阅读,同时它也能够防止你把值保存成 REB 或 PUSE :
枚举就是这么工作的,但如何用它来记录联合保存了哪个字段呢?来看一个例子……结构与联合用分号(;)来分割数据项,而枚举用逗号。
代码冰箱贴
你既然能用枚举创建新的数据类型,也就能把它保存在结构或联合中。下面这个程序用枚举变量来记录“量”的类型,你能找到丢失的代码吗?#include <stdio.h>typedef enum { COUNT, POUNDS, PINTS} unit_of_measure;typedef union { short count; float weight; float volume;} quantity;typedef struct { const char *name; const char *country; quantity amount; unit_of_measure units;} fruit_order;void display(fruit_order order){ printf("This order contains "); if (...............== PINTS) printf("%2.2f pints of %s\n", order.amount. ..............., order.name); else if (................ == ..............) printf("%2.2f lbs of %s\n", order.amount.weight, order.name); else printf("%i %s\n", order.amount. ..............., order.name);}int main(){ fruit_order apples = {"apples", "England", .amount.count=144, ...............}; fruit_order strawberries = {"strawberries", "Spain", .amount. ........=17.6, POUNDS}; fruit_order oj = {"orange juice", "U.S.A.", .amount.volume=10.5, ...............}; display(apples); display(strawberries); display(oj); return 0;}
代码冰箱贴解答
你既然能用枚举创建新的数据类型,也就能把它保存在结构或联合中。下面这个程序用枚举变量来记录“量”的类型,你找到丢失的代码了吗?
联合:……于是我对代码说,“瞧,不管你给我的是不是 float ,只要你问我要 int ,我就给你 int 。”
结构:哥们,这么做完全没有道理。
联合:就是没有道理。
结构:人人都知道你只有一块存储空间。
联合:是的,万物一体,佛曰……
枚举:发生了什么?
结构:枚举,闭嘴,这个家伙太过分了。
联合:如果用户只给出一条记录,比如在这个例子中,我就把它保存成 int ,只要用枚举或其他东西记录一下就行了。
枚举:你想让我来做这件事?
结构:闭嘴,枚举。
联合:如果用户希望一次保存多条数据,就应该用你,对吗?
结构:这群人根本不知道什么是秩序。
枚举:什么是秩序?
结构:秩序意味着独立且有序。我在存储器中相继摆放数据,同时保存所有数据。
联合:不错。
结构:同时保存所有数据(字正腔圆)。
枚举:(停顿)有问题吗?
联合:小声点,枚举。我认为这需要由用户来决定,如果他想保存多条数据,就用你;如果想保存有多种类型的数据,就选我。
结构:我给他打个电话。
联合:喂,等等……
枚举:他在给谁打电话,哥们?
结构/联合:闭嘴,枚举。
联合:别惹麻烦了,行吗?
结构:喂?请帮我接蓝牙服务。
联合:喂,我们再考虑一下。
结构:什么?让他过会儿给我回电话?
联合:也许这不是一个好主意。
结构:不用,帮我传句话,朋友。
联合:求你把电话挂掉。
枚举:电话那头是谁?
结构:小声点,枚举,没看见我在打电话么?听好了,你只要告诉他说,如果他想保存 float 和 int 变量就来找我,要么我去找他,明白了吗?喂?喂?
联合:沉住气,冷静。
结构:我 X,转接中!
联合:怎么了?把电话给我……不……电话里在放老鹰乐队的歌!我讨厌老鹰乐队……
枚举:你之所以那么胖,就是因为把字段打包在了一起?
结构:朋友,我们到外面聊两句。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论