- 締切済み
enumの使い方
scanfから入力した値からenumを使うことはできませんか? 以下のようにしてみたのですが解決策がわかりません よろしくお願いします。 #include <stdio.h> enum DATA { a=1, b, c }; int main() { enum DATA data; char tmp; scanf("%c", &tmp); // aを入力したとする data = tmp; printf("%d\n", data); // 1が欲しい return 0; }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- katorea21
- ベストアンサー率0% (0/0)
enumのシンボル名がa,b,c,,,と連続していることが前提ならこんな感じでいけるのでは? int main() { enum DATA data; char tmp; scanf("%c", &tmp); data = tmp-'a'+1; printf("%d\n", data); return 0; } そうでなければ個別に判定するしかなさそうです。 int main() { enum DATA data; char tmp; scanf("%c", &tmp); switch(tmp) { case 'a': data=a; break; case 'b': data=b; break; ・・・ case 'z': data=z; break; default: message("不正な文字"); break; } printf("%d\n", data); return 0; } 実際にはtmpに英小文字以外が入力された場合の対応なども必要でしょう。
- m-take0220
- ベストアンサー率60% (477/782)
enumで定義したラベル名は、コンパイル時に数値に変換されます。(また、型情報が付加されるので、代入操作などのチェックも入ります。) コンパイルされて実行可能な状態になった場合に、数値としてのデータしか持っていないため、数値からラベル名を取り出すようなことは出来ません。これは、対象の数値がscanfで得られたものかどうかにかかわらず、どんな数値からもできません。 できないことをできると思って情報を探していると、いくらでも時間が過ぎていきます。できないということが分かれば、別の方法を検討することができます。
- wormhole
- ベストアンサー率28% (1626/5665)
>小学生にもできるような価値の無い回答は必要ありませんね Cには、そのような機能がなく、できないから 「できません」と書いているんです。 Cの言語仕様も調べもしない人が何言ってんだか。
- wormhole
- ベストアンサー率28% (1626/5665)
できません。
お礼
小学生にもできるような価値の無い回答は必要ありませんね このように程度の低くない回答ができるなら再度の回答をお待ちしております。