1. ホーム
  2. c

[解決済み] C 言語の enum から値の代わりにテキストを表示する

2023-01-28 12:19:19

質問

int main()
{

  enum Days{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};

  Days TheDay;

  int j = 0;

  printf("Please enter the day of the week (0 to 6)\n");

  scanf("%d",&j);

  TheDay = Days(j);

  //how to PRINT THE VALUES stored in TheDay

  printf("%s",TheDay);  //   isnt working

  return 0;
}

どのように解決するのですか?

C言語の列挙は、コード内で便利な名前を持つ数値です。これらは文字列ではなく、ソースコードで割り当てられた名前はプログラムにコンパイルされないため、実行時にアクセスすることはできません。

欲しいものを得るための唯一の方法は、列挙値を文字列に変換する関数を自分で書くことです。例えば、(ここでは、宣言を移動させたと仮定して enum Days の外側に main ):

const char* getDayName(enum Days day) 
{
   switch (day) 
   {
      case Sunday: return "Sunday";
      case Monday: return "Monday";
      /* etc... */
   }
}

/* Then, later in main: */
printf("%s", getDayName(TheDay));

また、配列をマップとして使うこともできます、例えば

const char* dayNames[] = {"Sunday", "Monday", "Tuesday", /* ... etc ... */ };

/* ... */

printf("%s", dayNames[TheDay]);

しかし、ここではおそらく Sunday = 0 を代入したいところでしょう...。C 標準がコンパイラに列挙を 0 から始めるよう要求しているかどうかは分かりませんが、ほとんどのコンパイラはそうしています (誰かがコメントでこれを確認または否定すると思います)。