2018年10月1日月曜日

開発環境

  • OS: macOS High Sierra - Apple
  • Text Editor: Emacs
  • コンパイラー: LLVM/Clang, GCC(gcc)
  • プログラミング言語: C

Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の5章(構造体、共用体、ビットフィールド - 独自の構造を使う)、コードマグネット(p. 256)を取り組んでみる。

コードマグネット(p. 256)

Makefile

cc = cc

all: sample run

sample: sample.c
 cc sample.c -o sample

run: sample
 ./sample

コード

#include <stdio.h>

typedef enum {
  COUNT,
  POUNDS,
  PINTS,
} unit_of_measure;

typedef union {
  short count;
  float weight;
  float volume;
} quantity;

typedef struct {
  const char *name;
  const char *country;
  quantity amount;
  unit_of_measure units;
} fruit_order;

void display(fruit_order order) {
  printf("この注文に含まれるものは");
  if (order.units == COUNT) {
    printf("%i個の%sです。\n", order.amount.count, order.name);
  } else if (order.units == POUNDS) {
    printf("%2.2fポンドの%sです。\n", order.amount.weight, order.name);
  } else if (order.units == PINTS) {
    printf("%2.2fパイントの%sです。\n", order.amount.volume, order.name);
  }
}

int main() {
  fruit_order appples = {"リンゴ", "イギリス", .amount.count = 144, COUNT};
  fruit_order strawberries = {"いちご", "スペイン", .amount.weight = 10.5,
                              POUNDS};
  fruit_order oj = {"オレンジジュース", "アメリカ", .amount.volume = 10.5,
                    PINTS};
  fruit_order orders[] = {appples, strawberries, oj};

  for (int i = 0; i < 3; i++) {
    display(orders[i]);
  }
}

入出力結果(Terminal)

$ make
cc sample.c -o sample
./sample
この注文に含まれるものは144個のリンゴです。
この注文に含まれるものは10.50ポンドのいちごです。
この注文に含まれるものは10.50パイントのオレンジジュースです。
$

0 コメント:

コメントを投稿