-3

所以我有以下代码:

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 进行字符串输入。

4

1 回答 1

3

你不能%s在 printf 函数中打印 std::string ,试试这个:

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。

于 2013-01-29T03:47:51.063 回答