枚举变量保存符号

有时你不想保存数字或文本,而是想保存一组符号。如果你想记录一周中的某一天,只想保存MON-DAY、TUESDAY、WEDNESDAY……这些符号。你不需要保存文本,因为一共只有七种不同的取值。

这就是为什么要发明枚举的原因。

有了枚举,就可以创建一组这样的符号:

枚举变量保存符号 - 图1

enum colors类型定义的变量只能设为列表中的某个关键字。可以像下面这样定义enum colors变量:

  1. enum colors favorite = PUCE;

在幕后,计算机会为列表中的每个符号分配一个数字,枚举变量中也只保存数字。至于是什么数字,你完全不用操心,C程序员只要在代码中写符号就行了。枚举不仅让代码更易于阅读,同时它也能够防止你把值保存成REBPUSE

枚举变量保存符号 - 图2

枚举就是这么工作的,但如何用它来记录联合保存了哪个字段呢?来看一个例子……

枚举变量保存符号 - 图3

结构与联合用分号(;)来分割数据项,而枚举用逗号。

枚举变量保存符号 - 图4代码冰箱贴

你既然能用枚举创建新的数据类型,也就能把它保存在结构或联合中。下面这个程序用枚举变量来记录“量”的类型,你能找到丢失的代码吗?

  1. #include <stdio.h>
  2. typedef enum {
  3. COUNT, POUNDS, PINTS
  4. } unit_of_measure;
  5. typedef union {
  6. short count;
  7. float weight;
  8. float volume;
  9. } quantity;
  10. typedef struct {
  11. const char *name;
  12. const char *country;
  13. quantity amount;
  14. unit_of_measure units;
  15. } fruit_order;
  16. void display(fruit_order order)
  17. {
  18. printf("This order contains ");
  19. if (...............== PINTS)
  20. printf("%2.2f pints of %s\n", order.amount. ..............., order.name);
  21. else if (................ == ..............)
  22. printf("%2.2f lbs of %s\n", order.amount.weight, order.name);
  23. else
  24. printf("%i %s\n", order.amount. ..............., order.name);
  25. }
  26. int main()
  27. {
  28. fruit_order apples = {"apples", "England", .amount.count=144, ...............};
  29. fruit_order strawberries = {"strawberries", "Spain", .amount. ........=17.6, POUNDS};
  30. fruit_order oj = {"orange juice", "U.S.A.", .amount.volume=10.5, ...............};
  31. display(apples);
  32. display(strawberries);
  33. display(oj);
  34. return 0;
  35. }

枚举变量保存符号 - 图5

枚举变量保存符号 - 图6代码冰箱贴解答

你既然能用枚举创建新的数据类型,也就能把它保存在结构或联合中。下面这个程序用枚举变量来记录“量”的类型,你找到丢失的代码了吗?

枚举变量保存符号 - 图7

 

枚举变量保存符号 - 图8

联合:……于是我对代码说,“瞧,不管你给我的是不是float,只要你问我要int,我就给你int。”

结构:哥们,这么做完全没有道理。

联合:就是没有道理。

结构:人人都知道你只有一块存储空间。

联合:是的,万物一体,佛曰……

枚举:发生了什么?

结构:枚举,闭嘴,这个家伙太过分了。

联合:如果用户只给出一条记录,比如在这个例子中,我就把它保存成int,只要用枚举或其他东西记录一下就行了。

枚举:你想让我来做这件事?

结构:闭嘴,枚举。

联合:如果用户希望一次保存多条数据,就应该用你,对吗?

结构:这群人根本不知道什么是秩序。

枚举:什么是秩序?

结构:秩序意味着独立且有序。我在存储器中相继摆放数据,同时保存所有数据。

联合:不错。

结构:同时保存所有数据(字正腔圆)。

枚举:(停顿)有问题吗?

联合:小声点,枚举。我认为这需要由用户来决定,如果他想保存多条数据,就用你;如果想保存有多种类型的数据,就选我。

结构:我给他打个电话。

联合:喂,等等……

枚举:他在给谁打电话,哥们?

结构/联合:闭嘴,枚举。

联合:别惹麻烦了,行吗?

结构:喂?请帮我接蓝牙服务。

联合:喂,我们再考虑一下。

结构:什么?让他过会儿给我回电话?

联合:也许这不是一个好主意。

结构:不用,帮我传句话,朋友。

联合:求你把电话挂掉。

枚举:电话那头是谁?

结构:小声点,枚举,没看见我在打电话么?听好了,你只要告诉他说,如果他想保存floatint变量就来找我,要么我去找他,明白了吗?喂?喂?

联合:沉住气,冷静。

结构:我X,转接中!

联合:怎么了?把电话给我……不……电话里在放老鹰乐队的歌!我讨厌老鹰乐队……

枚举:你之所以那么胖,就是因为把字段打包在了一起?

结构:朋友,我们到外面聊两句。