計算機科学のブログ

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
マイクさんへ、
残念ながら、前回のデートの結果、
再度お会いすることはないとの連絡を受けました。
ルイスさんへ、
よいお知らせです。前回のデートの結果、
もう一度お会いしたいとの連絡を受けました。
マットさんへ、
よいお知らせです。前回のデートの結果、
もう一度お会いしたいとの連絡を受けました。
ウィリアムさんへ、
おめでとうございます!前回のデートの結果、
結婚を申し込みたいとの連絡を受けました。
%