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
  • 我究竟做错了什么?

您做错的第一件事是不使用调试器。

您做错的第二件事是将整数添加到字符串文字。例如," DEC "是一个具有指针类型的字符串文字char const *。表达结果

day + " DEC " + year

char const *指向未知内存区域的指针。在你的情况下,这个未知区域被零填充,这就是你得到空字符串类型char const *的原因。(这也是我的情况,当我在调试器中运行你的程序时)

您将此空字符串分配给data,这就是您得到空输出的原因。

于 2013-05-20T19:57:07.037 回答