C - 構造体、共用体、ビットフィールド - 独自の構造を使う - 指示付き初期化子
Head First C ―頭とからだで覚えるCの基本、 David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 5章(構造体、共用体、ビットフィールド - 独自の構造を使う)、p.250(混乱したミキサー)の解答を求めてみる。
Makefile
main: main.c
cc main.c && ./a.out
コード
main.c
#include <stdio.h>
typedef union
{
float lemon;
int lime_pieces;
} lemon_lime;
typedef struct
{
float tequila;
float cointreau;
lemon_lime citrus;
} margarita;
int main()
{
margarita m = {2.0, 1.0, .citrus.lemon = 2};
printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%2.1f単位のジュース\n\n",
m.tequila, m.cointreau, m.citrus.lemon);
margarita m1 = {2.0, 1.0, {0.5}};
printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%2.1f単位のジュース\n\n",
m1.tequila, m1.cointreau, m1.citrus.lemon);
margarita m2 = {2.0, 1.0, {.lime_pieces = 1}};
printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n%i切れのライム\n\n",
m2.tequila, m2.cointreau, m2.citrus.lime_pieces);
}
入出力結果(Terminal, Zsh)
% make
cc main.c && ./a.out
2.0単位のテキーラ
1.0単位のコアントロー
2.0単位のジュース
2.0単位のテキーラ
1.0単位のコアントロー
0.5単位のジュース
2.0単位のテキーラ
1.0単位のコアントロー
1切れのライム
%