C言語のについてご質問です。
現在、参考書を読みながら独学で勉強中なのですが、下記のプログラムで解らない箇所があります。
lang
1/* 2 選ばれた動物の鳴き声を表示 3 */ 4 5#include <stdio.h> 6 7enum animal { Dog, Cat, Monkey, Invalid }; 8 9/*--- 犬が鳴く ---*/ 10void dog(void) 11{ 12 puts("ワンワン!!"); 13} 14 15/*--- 猫が鳴く ---*/ 16void cat(void) 17{ 18 puts("ニャ〜オ!!"); 19} 20 21/*--- 猿が鳴く ---*/ 22void monkey(void) 23{ 24 puts("キッキッ!!"); 25} 26 27/*--- 動物を選ぶ ---*/ 28enum animal select(void) 29{ 30 int tmp; 31 32 do { 33 printf("0…犬 1…猫 2…猿 3…終了:"); 34 scanf("%d", &tmp); 35 } while (tmp < Dog || tmp > Invalid); 36 return tmp; 37} 38 39int main(void) 40{ 41 enum animal selected; 42 43 do { 44 switch (selected = select()) { 45 case Dog : dog(); break; 46 case Cat : cat(); break; 47 case Monkey : monkey(); break; 48 } 49 } while (selected != Invalid); 50 51 return 0; 52 53}
このプログラムで、例えば「1」の猫を選択したとして、select()関数からはint型のtmpの1が返るはずですが、その後のswitchでなぜ「case Cat」が選択されるのでしょうか?
そもそもselect()関数がenum animal型なので文字列"Cat"が返ってきているのでしょうか?
またはswichの(式)の評価が1であれば、Catに振られている(?)1が選択されるということなのでしょうか?
select()の返却値とcase Catが選ばれる仕組みがよくわかりません。
どなたかご回答よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/07 10:13