計算機科学のブログ

ほしい物リスト

C - 高度な関数 - 関数を最大限に活用する - enum, switch/case

Head First C ―頭とからだで覚えるCの基本David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の7章(高度な関数 - 関数を最大限に活用する)、p.335(プールパズル)の解答を求めてみる。

Makefile

all: main.c
	cc main.c && ./a.out

コード

main.c

#include <stdio.h>

typedef enum
{
    DUMP,
    SECOND_CHANCE,
    MARRIAGE
} response_type;
typedef struct
{
    char *name;
    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;
        default:
            marriage(r[i]);
            break;
        }
    }
}

入出力結果(Terminal, Zsh)

% make
cc main.c && ./a.out
マイクさんへ、
残念ながら、前回のデートの結果、
再度お会いすることはないことの連絡を受けました。
ルイスさんへ、
よいお知らせです。、前回のデートの結果、
もう一度お会いしたいとの連絡を受けました。至急ご連絡ください。
マットさんへ、
よいお知らせです。、前回のデートの結果、
もう一度お会いしたいとの連絡を受けました。至急ご連絡ください。
ウィリアムさんへ、
おめでとうございます!前回のデートの結果、
結婚を申し込みたいとの連絡を受けました。
%