- 1 : 2021/12/08(水) 12:16:05.579 ID:yRxlTfNC0
-
列挙体の動きが分からんのだわ
詳しい人解説してくれ - 2 : 2021/12/08(水) 12:16:23.136 ID:yRxlTfNC0
-
↓参考書に乗ってたコード
#include <stdio.h>
enum animal { Dog, Cat, Monkey, Invalid };
void dog(void)
{
puts("ワンワン!!");
}void cat(void)
{
puts("ニャ~オ!!");
}void monkey(void)
{
puts("キッキッ!!");
}enum animal select(void)
{
int tmp;do {
printf("0…犬 1…猫 2…猿 3…終了:");
scanf("%d", &tmp);
} while (tmp < Dog || tmp > Invalid);
return (tmp);
}int main(void)
{
enum animal selected;do {
switch (selected = select()) {
case Dog: dog();break;
case Cat: cat();break;
case Monkey: monkey();break;
}
} while (selected != Invalid);return (0);
} - 3 : 2021/12/08(水) 12:16:36.312 ID:2D0FIEmgd
-
らっきょ
- 4 : 2021/12/08(水) 12:16:43.631 ID:WrUD2Na60
-
enumのこと?
動き??? - 16 : 2021/12/08(水) 12:20:31.685 ID:yRxlTfNC0
-
>>4
4つ目の関数のenum animal 関数ってなってるとこと
main関数の enum animal selectedってところが
よくわからない - 5 : 2021/12/08(水) 12:17:13.228 ID:bLpN+bqa0
-
scanfがクソ
- 6 : 2021/12/08(水) 12:17:40.792 ID:ZXwAZBGo0
-
ニャ~オ!!
- 7 : 2021/12/08(水) 12:17:52.165 ID:1SNdhxSF0
-
C#なら
- 8 : 2021/12/08(水) 12:18:37.082 ID:bN7PBIt9M
-
モンキーモンも~んwww
- 9 : 2021/12/08(水) 12:18:37.756 ID:sh4eZqDla
-
ワンワン!
- 10 : 2021/12/08(水) 12:18:58.280 ID:yRxlTfNC0
-
これをC++の環境でコンパイルしたら
4つ目の関数のenum animal selectの部分で戻り値の型がintでanimal型じゃないと怒られて動かないんだ - 14 : 2021/12/08(水) 12:20:14.064 ID:bLpN+bqa0
-
>>10
キャストしろや - 17 : 2021/12/08(水) 12:21:02.488 ID:1SNdhxSF0
-
>>10
そりゃint tmpをreturnとしてるんだから当たり前だろ
C言語の書き方は知らないけどanimalのtmp番目を返すようにしろ - 21 : 2021/12/08(水) 12:23:50.644 ID:yRxlTfNC0
-
>>17
この参考書がの書き方が悪いってこと? - 26 : 2021/12/08(水) 12:27:20.763 ID:fBUuUQujM
-
>>21
少なくともかなり行儀は悪い
C言語はKR本以外は捨ててよろしい
KR本もかなり古いから全く問題ないとも言えないけど
それでもC言語はあれより良い本はない - 28 : 2021/12/08(水) 12:28:34.154 ID:rYej41Z/0
-
>>17
これ。 - 11 : 2021/12/08(水) 12:19:03.032 ID:WrUD2Na60
-
動きも何も
順番に1,2,3て割り当てられてる感じだよ - 12 : 2021/12/08(水) 12:20:06.501 ID:fBUuUQujM
-
原則的にはそのまま整数値と相互にキャストするような使い方したらダメ
サンプルが糞 - 18 : 2021/12/08(水) 12:22:21.288 ID:yRxlTfNC0
-
>>12
やっぱ参考書がくそなのか… - 13 : 2021/12/08(水) 12:20:13.544 ID:V7/18SKQr
-
列挙体とか初めて聞いたわ
- 15 : 2021/12/08(水) 12:20:17.002 ID:UIoJzIJJa
-
return (animal)tmp
だっけか
型変換忘れた - 19 : 2021/12/08(水) 12:23:09.989 ID:fBUuUQujM
-
tmp < Dog
なんかも同じだけれど明治的にキャストすればコンパイルは通るけど通れば良いってもんでもない
どんな参考書使ってんだよ - 20 : 2021/12/08(水) 12:23:33.092 ID:XaaMTAU10
-
Cよく知らんけどenum animal selectedはただの宣言じゃないの?
その後select()を代入してるし - 22 : 2021/12/08(水) 12:24:37.239 ID:4Zrydh6E0
-
enum自体が不要なので憶えんでよろしい
- 23 : 2021/12/08(水) 12:24:53.630 ID:XaaMTAU10
-
Cってこういう初期化しない変数宣言って結構あるの?
null safeな言語ばっかり触ってるから違和感結構あるな - 27 : 2021/12/08(水) 12:27:37.841 ID:LyzWNP/Qa
-
>>23
型宣言だけってのはあり得る
でも初期化しないとアドレスが入ってることがあるから
型宣言ついでに初期化した方が扱いやすいというか
バグを踏みにくくなる - 32 : 2021/12/08(水) 12:32:36.776 ID:XaaMTAU10
-
>>27
なるほどなー
Dogにプロパティ参照みたいな形(animal.Dog)でアクセスしないのもなんかすごいね
Cはクラスないから被ることはないのかな - 34 : 2021/12/08(水) 12:35:00.484 ID:pNOelWCHa
-
>>32
構造体はあるよ
構造体の中には変数定義も確かメソッド定義もできたはず
クラスとの違いはアクセス修飾子の有無だったはずだけで
構造体は全部public扱い - 25 : 2021/12/08(水) 12:26:13.401 ID:yRxlTfNC0
-
列挙体って動きとしては
#define の型変換と同じってことでいいか?
コンパイルするときDogが0に置き換わるみたいな感じで? - 31 : 2021/12/08(水) 12:30:51.596 ID:yRxlTfNC0
-
>>25
これ教えて欲しいわ
実際あんまり使わんらしいし
この認識でいいなら列挙体ってあったなあってことで脳みその片隅に閉まっておくんだが - 29 : 2021/12/08(水) 12:30:32.765 ID:RQZdCTOw0
-
中の数値を意識しないでいいようにする為の列挙体なのに
名前に特定の値が入っている想定してるのはマズいよね
コメント