C - 高度な関数 - 関数を最大限に活用する - enum, データ型
Head First C ―頭とからだで覚えるCの基本、 David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 7章(高度な関数 - 関数を最大限に活用する)、p.335(プールパズル)の解答を求めてみる。
Makefile
main: main.c
cc main.c && ./a.out
コード
main.c
#include <stdlib.h>
#include <stdio.h>
enum response_type
{
DUMP,
SECOND_CHANCE,
MARRIAGE
};
typedef struct
{
char *name;
enum response_type type;
} response;
void dump(response r)
{
printf("%sさんへ、\n", r.name);
puts("残念ながら、前回のデートの結果、");
puts("再度お会いすることはないとの連絡を受けました。");
}
void second_chance(response r)
{
printf("%sさんへ、\n", r.name);
puts("よいお知らせです。前回のデートの結果、");
puts("もう一度お会いしたいとの連絡を受けました。");
}
void marriage(response r)
{
printf("%sさんへ、\n", r.name);
puts("おめでとうございます!前回のデートの結果、");
puts("結婚を申し込みたいとの連絡を受けました。");
}
int main()
{
response r[] = {{"マイク", DUMP},
{"ルイス", SECOND_CHANCE},
{"マット", SECOND_CHANCE},
{"ウィリアム", MARRIAGE}};
for (size_t i = 0; i < 4; i++)
{
switch (r[i].type)
{
case DUMP:
dump(r[i]);
break;
case SECOND_CHANCE:
second_chance(r[i]);
break;
case MARRIAGE:
marriage(r[i]);
break;
default:
break;
}
}
}
入出力結果(Terminal, Zsh)
% make
cc main.c && ./a.out
マイクさんへ、
残念ながら、前回のデートの結果、
再度お会いすることはないとの連絡を受けました。
ルイスさんへ、
よいお知らせです。前回のデートの結果、
もう一度お会いしたいとの連絡を受けました。
マットさんへ、
よいお知らせです。前回のデートの結果、
もう一度お会いしたいとの連絡を受けました。
ウィリアムさんへ、
おめでとうございます!前回のデートの結果、
結婚を申し込みたいとの連絡を受けました。
%