分手信自动生成器

假设你在写一个群发邮件的程序,向不同人发送不同类型的消息,一种创建回复数据的方法是使用结构:

分手信自动生成器 - 图1

你将发送三种类型的回复,每条回复都要保存回复类型,回复类型用枚举表示。在使用新数据类型response时需要根据回复类型分别调用以下三个函数:

  1. void dump(response r)
  2. {
  3. printf("Dear %s,\n", r.name);
  4. puts("Unfortunately your last date contacted us to");
  5. puts("say that they will not be seeing you again");
  6. }
  7.  
  8. void second_chance(response r)
  9. {
  10. printf("Dear %s,\n", r.name);
  11. puts("Good news: your last date has asked us to");
  12. puts("arrange another meeting. Please call ASAP.");
  13. }
  14.  
  15. void marriage(response r)
  16. {
  17. printf("Dear %s,\n", r.name);
  18. puts("Congratulations! Your last date has contacted");
  19. puts("us with a proposal of marriage.");
  20. }

你已经有了数据结构,生成回复的函数也有了,下面就来看看如何根据response数组批量生成回复。

分手信自动生成器 - 图2游泳池拼图

从游泳池中取出代码片段,放到下面的空白横线处。你的目标是拼凑出main()函数,为response数组批量生成邮件。每个片段最多只能使用一次。

分手信自动生成器 - 图3

分手信自动生成器 - 图4游泳池拼图解答

从游泳池中取出代码片段,放到下面的空白横线处。你的目标是拼凑出main()函数,为response数组批量生成邮件。每个片段最多只能使用一次。

分手信自动生成器 - 图5

分手信自动生成器 - 图6试驾

当运行程序时,程序果然为每个人都生成了相应的回复:

分手信自动生成器 - 图7

程序正确运行了,但代码中充斥着大量函数调用,每次都需要根据回复类型来调用函数,看起来像这样:

  1. switch(r.type) {
  2. case DUMP:
  3. dump(r);
  4. break;
  5. case SECOND_CHANCE:
  6. second_chance(r);
  7. break;
  8. default:
  9. marriage(r);
  10. }

如果增加第四种回复类型,你就不得不修改程序中每一个像这样的地方。很快,就有一大堆代码需要维护,而且这样很容易出错。

好在可以使用一个C语言的技巧,这个技巧涉及数组……

分手信自动生成器 - 图8