enumで宣言されたメンバ名を取得する方法を教えてください
```c
#include <stdio.h>
enum name{
Tom = 50,
Sharon = 32,
Bill = 40,
Teresa = 10,
John = 1
};
int main(void) {
int num = 0;
int num2 = 0;
scanf("%d%d",&num,&num2);
if(num < num2){
int from = num2;
num2 = num;
num = from;
}
enum name Tom,Sharon,Bill,Teresa,John;
printf("%s", );❗️❗️❗️
return 0;
}
```
このような感じで数字を入力してその数字に応じた名前を取得してプリントしたいです
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
ちょうどプリプロセッサの文字列化に関する質問
https://oshiete.goo.ne.jp/qa/12848642.html
があったので, それを使う方法を書いてみる (ただし規格に適合するように書こうとすると現時点ではまだきれいには書けない).
まず decl-enums.txt というファイル (まあ名前はどうでもいいんだが) に
DeclareEnumerator(Tom, = 50)
DeclareEnumerator(Sharon, = 32)
DeclareEnumerator(Bill, = 40)
DeclareEnumerator(Teresa, = 10)
DeclareEnumerator(John, = 1)
と書いておいて
列挙型の宣言を
enum name {
#define DeclareEnumerator(enumerator, ...) enumerator __VA_ARGS__,
#include "decl-enums.txt"
#undef DeclareEnumerator
};
とする. んで列挙子からその名称を得る関数を
const char *getEnumeratorName(int val)
{
switch (val) {
#define DeclareEnumerator(enumerator, ...) case enumerator: return #enumerator;
#include "decl-enums.txt"
#undef DeclareEnumerator
default: return "no such enumerator"; // てきとう
}
}
とか書く. 列挙子を変えたり増減させたりしたいときには decl-enums.txt を適宜いじるようにすれば, メインのプログラム自体はさわらなくていいので安心.
__VA_OPT__ が使えればもっときれいなのだが現状 C の規格にはないのでここまで.
No.4
- 回答日時:
ついでに.
main の中で
enum name Tom,Sharon,Bill,Teresa,John;
って定義してるけど, そこからあとでは列挙型 name の列挙子が使えなくなることは認識できてるのかな?
No.2
- 回答日時:
enumで宣言されたメンバ名を取得する関数を作成して、その関数を呼び出せばよいのでは?
char *getEnumName(int x){
if(x==50) return("Tom");
else if (x==32) return("Sharon");
:
見たいな感じでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 配列から数字だけをint型として抜き取りたい 3 2021/12/05 13:53
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- Java java キーボード入力された値の数だけ文字を出力するfor文を使ったプログラムの書き方を教えてくだ 1 2022/02/06 15:55
- C言語・C++・C# ポインタの宣言方法 1 2023/10/26 20:32
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルピンスキーのギャスケット
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
acceptをalarmでタイムアウトさ...
-
因数分解を行うプログラムについて
-
(マルチスレッド)_beginthrea...
-
std::set<int> で、ある値が何...
-
C言語での引数の省略方法
-
異なる文字列のマッチングを、D...
-
構造体のメンバ変数が途中で変...
-
ファイルから読みこむ方法
-
毎回違う乱数を生成するにはど...
-
「指定されたキャストは有効で...
-
ヒープ木の格納 【プログラミ...
-
C言語 巡回セールスマン問題 2-...
-
プログラミング
-
ColorをRGBで指定する方法
-
フィボナッチ数列のプログラム
-
商と剰余を同時に求める(C言語)
-
C言語でif文が予想と違う動きを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
実数の整数部,小数部の取得
-
acceptをalarmでタイムアウトさ...
-
C言語
-
std::set<int> で、ある値が何...
-
因数分解を行うプログラムについて
-
数字列を3桁ごとにカンマで区切...
-
(マルチスレッド)_beginthrea...
-
比較回数と交換回数表示について
-
式は定数値が必要です」という...
-
int型の変数値をバイト列として...
-
c言語の配列を使ってサイコロを...
おすすめ情報