-5

ここに私のコードがあります:

int month()
  {
      //this array contains all of the months names
       char months[24] = {'JANUARY', 'FEBURARY',  'MARCH ', 'APRIL', 'MAY', 'JUNE',      'JULY',
                 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER', 'JAN',
                 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEPT', 'OCT', 'NOV',         'DEC'};


       char month_name[10];  // a null terminating char array for your month of birth
       cin >> month_name;

       for(int j = 0; j <= 24; j++ )
           {
             if(month_name == months[j])
           {
              return month_name;
           }
             else
           {
             cout << "\n" << endl;
             show_error();
             cout << "\n" << endl;
             bFlag = false;
             return bFlag;
           }
          }

        }

実行しようとするたびに、警告メッセージが表示されます。暗黙的な定数変換のオーバーフロー。これは何を意味するのでしょうか?

4

1 に答える 1

2

まず、月の名前を"引用符で囲み、配列にする必要がありますchar *

char* months[] = {"1月", "2月",..."12月"}

次に、==useを使用_stricmpして文字列を比較する代わりに、戻り値が0の場合、一致しています。

iinは大文字と小文字を区別しないことを意味します_stricmp(したがって、"January" と "january" は小文字で比較すると等しいと見なされます)。strcmp

_stricmpここに文書化されています(stricmpVisual Studioでは非推奨です)が、muxからのコメントを確認してください。私は関数に精通していませんが、彼は正しいかもしれません!

Nik B. が指摘したように、常に int を返す必要があります。月が見つかったら、そのインデックス ( j) を返します。月の短い名前を追加した方法を確認すると、次を使用して、1 月から 12 月までの 0 から 11 までの対応を維持できます。

return j % 12;
于 2012-11-16T18:08:49.533 に答える