Как работает Atoi в C ++?

Итак, у меня есть следующий код:

void Start(int &year, string &mon, char &nyd)
{
printf("%s", mon);
int month= atoi(mon.c_str());
printf("%i", month);
}

Когда входящий параметр «03» (первый printf показывает 03), я получил 0 за месяц.

Однако, если я добавлю эту строку

mon = "03";

Я получил 3, что правильно, за месяц.

Зачем……????

РЕДАКТИРОВАТЬ: Я понял это. Вы, ребята, были правы. НЕ используйте scanf для ввода строки.

-3

Решение

Вы не можете напечатать std :: string с %s в функции printf попробуйте это:

void Start(int &year, const std::string &mon, char &nyd)
{
std::cout << mon << std::endl;
int month= atoi(mon.c_str());
std::cout << month << std::endl;
}

Или же

void Start(int &year, string &mon, char &nyd)
{
printf("%s\n", mon.c_str());
int month= atoi(mon.c_str());
printf("%i\n", month);
}

Но std :: cout предпочтительнее функции C printf.

Также не используйте scanf с std :: string, используйте std :: cin вместо scanf, std :: cout вместо printf.

3

Другие решения

Других решений пока нет …