
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
int16_t の _t は何?
-
std::set<int> で、ある値が何...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
C言語での引数の省略方法
-
実数の整数部,小数部の取得
-
「指定されたキャストは有効で...
-
足して100になるような乱数のア...
-
c言語の問題です 課題1 (二分探...
-
複数桁10進数の*桁目だけを抽出...
-
エラー 添字が付けられた値が、...
-
C言語<素数を求めるプログラム>
-
乗換案内のC言語プログラムに...
-
C#の1~Xまでの数値を徐々に...
-
C言語の基礎 . 2乗値の差につ...
-
「Aに対するBの割合」と「Aに対...
-
Aの値からBの値を除するとは??
-
2曲同時再生するにはどうした...
-
ある商品のロス率を5%見込み、...
-
有効数字について 以前質問をし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
ColorをRGBで指定する方法
-
未解決の外部シンボル _printf...
-
構造体の勉強中です 合計点の高...
-
商と剰余を同時に求める(C言語)
-
C言語で分からないところがあり...
-
式は定数値が必要です」という...
-
C言語での奇数の和
-
std::set<int> で、ある値が何...
-
課題でつまってます・・・
-
int16_t の _t は何?
-
比較回数と交換回数表示について
おすすめ情報