• 締切済み

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; }

みんなの回答

回答No.4

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に英小文字以外が入力された場合の対応なども必要でしょう。

回答No.3

enumで定義したラベル名は、コンパイル時に数値に変換されます。(また、型情報が付加されるので、代入操作などのチェックも入ります。) コンパイルされて実行可能な状態になった場合に、数値としてのデータしか持っていないため、数値からラベル名を取り出すようなことは出来ません。これは、対象の数値がscanfで得られたものかどうかにかかわらず、どんな数値からもできません。 できないことをできると思って情報を探していると、いくらでも時間が過ぎていきます。できないということが分かれば、別の方法を検討することができます。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>小学生にもできるような価値の無い回答は必要ありませんね Cには、そのような機能がなく、できないから 「できません」と書いているんです。 Cの言語仕様も調べもしない人が何言ってんだか。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

できません。

miminon21
質問者

お礼

小学生にもできるような価値の無い回答は必要ありませんね このように程度の低くない回答ができるなら再度の回答をお待ちしております。

関連するQ&A