C - 構造体、共用体、ビットフィールド - 独自の構造を使う - enum変数, シンボル
Head First C ―頭とからだで覚えるCの基本、 David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 5章(構造体、共用体、ビットフィールド - 独自の構造を使う)、p.256(コードマグネット)の解答を求めてみる。
Makefile
main: main.c
cc main.c && ./a.out
コード
main.c
#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 == PINTS)
{
printf("%2.2fパイントの%sです。\n", order.amount.volume, order.name);
}
else if (order.units == POUNDS)
{
printf("%2.2fポンドの%sです。\n", order.amount.weight, order.name);
}
else
{
printf("%2.2i個の%sです。\n", order.amount.count, order.name);
}
}
int main()
{
fruit_order apples = {"リンゴ", "イギリス", .amount.count = 144, COUNT};
fruit_order strawberries = {"いちご", "スペイン", .amount.weight = 17.6, POUNDS};
fruit_order oj = {"オレンジジュース", "アメリカ", .amount.volume = 10.5, PINTS};
display(apples);
display(strawberries);
display(oj);
}
入出力結果(Terminal, Zsh)
% make
cc main.c && ./a.out
この注文に含まれるものは144個のリンゴです。
この注文に含まれるものは17.60ポンドのいちごです。
この注文に含まれるものは10.50パイントのオレンジジュースです。
%