0

私は C++ が初めてで、次のコードに問題があります。

string output_date(int day, int month, int year){
    string date;
    if ((day > 0 && day <= 30) && (month > 0 && month <= 12) && (year >= 2013)){
        switch (month){
          case 1: date = day + " JAN " + year; break;
          case 2: date = day + " FEB " + year; break;
          case 3: date = day + " MAR " + year; break;
          case 4: date = day + " APR " + year; break;
          case 5: date = day + " MAY " + year; break;
          case 6: date = day + " JUN " + year; break;
          case 7: date = day + " JUL " + year; break;
          case 8: date = day + " AUG " + year; break;
          case 9: date = day + " SEP " + year; break;
          case 10: date = day + " OCT " + year; break;
          case 11: date = day + " NOV " + year; break;
          case 12: date = day + " DEC " + year; break;
        }
    }
    return date;
}

私がしようとするとき:

cout << output_date(22,12,2013);

何も起きません。私は何を間違っていますか?

4

2 に答える 2

5

stringstream を使用して、ストリームから文字列を返すことをお勧めします。

stringstream date;
    if ((day > 0 && day <= 30) && (month > 0 && month <= 12) && (year >= 2013)){
        switch (month){
          case 1: date << day << " JAN " << year; break;
          case 2: date << day << " FEB " << year; break;
          //yadda yadda.....
        }
    }
return date.str();

このためには、ヘッダーを含める必要があります<sstream>

于 2013-05-20T18:36:35.687 に答える
0
  • 私は何を間違っていますか?

最初に間違ったことは、デバッガーを使用していないことです。

2 番目に間違っているのは、文字列リテラルに整数を追加することです。たとえば、" DEC "ポインタ型を持つ文字列リテラルchar const *です。式の結果

day + " DEC " + year

char const *メモリの未知の領域を指すポインタです。あなたの場合、この不明な領域はゼロで埋められてchar const *いたため、結果としてタイプの空の文字列が得られました。(これは、デバッガーでプログラムを実行したときの私の場合でもありました)

この空の文字列を に割り当てたためdata、空の出力が得られました。

于 2013-05-20T19:57:07.037 に答える