2013-05-20 54 views
0

我是新的C++,我有這個代碼的麻煩的回報:試圖COUT功能

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); 

沒有出現。我究竟做錯了什麼?

+3

您的簽名中的函數名稱和調用位置不匹配。這是一個錯字,還是問題? – ajp15243

+5

'「JAN」'不是'std :: string',所以添加的是指針添加。 '日+「JAN」+ year'是一個'const char *'指向誰知道的地方。 –

+3

SSCCE對於這些類型的問題是最佳的。 – chris

回答

5

我會建議使用字符串流,並從流返回的字符串:

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>

+2

或使用'std :: to_string'。無論如何,我會使用地圖/數組作爲月份名稱。 – chris

+0

@chris我也會使用地圖,但似乎更基本的方法會更好的用戶。 –

+0

我想把「天」和「年」的位分開。 – Flexo

0
  • 我到底做錯了什麼?

你做錯事的第一件事是不使用調試器。

你做錯了的第二件事是將整數添加到字符串文字。例如," DEC "是具有指針類型char const *的字符串文字。表達式的結果

day + " DEC " + year 

是一個char const *指針指向未知區域的內存。在你的情況下,這個未知區域被零填充,這就是爲什麼你得到空字符串char const *作爲結果。 (這是我的情況,當我在調試器中運行程序時)

您將此空字符串分配給data,這就是爲什麼您得到空輸出。