2013-05-20 4 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', поэтому дополнения являются добавлениями указателей. 'day +" JAN "+ year' является' const char * ', указывающим who-know-where. –

+3

SSCCE был бы оптимальным для этих типов вопросов. – chris

ответ

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>

+2

Или используйте 'std :: to_string'. В любом случае я бы использовал карту/массив для имен месяцев. – chris

+0

@chris Я бы также использовал карту, но, похоже, более простой подход был бы лучше для пользователя. –

+0

Я бы включил бит «день» и «год» из переключателя. – Flexo

0
  • Что я делаю неправильно?

Первое, что вы делаете неправильно, не использует отладчик.

Второе, что вы делаете неправильно, добавляет целые числа в строковый литерал. Например, " DEC " является строковым литералом, который имеет указатель типа char const *. Результат выражения

day + " DEC " + year 

char const * является указатель, указывающий на неизвестную область памяти. В вашем случае эта неизвестная область была заполнена нулями, поэтому в результате вы получили пустую строку типа char const *. (Это тоже было мое дело, когда я запускал вашу программу в отладчике)

Вы присвоили эту пустую строку data, поэтому вы получили пустой вывод.

Смежные вопросы