2018年6月24日日曜日

開発環境

Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の7章(高度な関数 - 関数を最大限に活用する)、自分で考えてみよう(p. 339)を取り組んでみる。

自分で考えてみよう(p. 339)

Makefile

CC = cc

all: sample run

sample: sample.c
 $(CC) sample.c -o sample

run: sample
 ./sample

コード

#include <stdio.h>

typedef struct Response Response;
typedef void (*fn_type)(Response);

enum response_type { DUMP, SECOND_CHANCE, MARRIAGE };
void dump(Response r);
void second_chance(Response r);
void marriage(Response r);

fn_type replies[] = {dump, second_chance, marriage};

struct Response {
  char *name;
  enum response_type type;
};

void dump(Response r) {
  printf("%sさんへ、\n"
         "残念ながら、前回のデートの結果、\n"
         "再度お会いすることはないとの連絡を受けました。\n",
         r.name);
}

void second_chance(Response r) {
  printf("%sさんへ、\n"
         "よいお知らせです。前回のデートの結果、\n"
         "もう一度お会いしたいとの連絡を受けました。至急ご連絡ください。\n",
         r.name);
}

void marriage(Response r) {
  printf("%sさんへ、\n"
         "おめでとうございます!前回のデートの結果、\n"
         "結婚を申し込みたいとの連絡を受けました。\n",
         r.name);
}

int main() {
  Response r[] = {{"マイク", DUMP},
                  {"ルイス", SECOND_CHANCE},
                  {"マット", SECOND_CHANCE},
                  {"ウィリアム", MARRIAGE}};
  for (int i = 0; i < 4; i++) {
    Response res = r[i];
    fn_type reply = replies[res.type];
    reply(res);
  }
}
        

入出力結果(Terminal)

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

0 コメント:

コメントを投稿