-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

%sprintf 関数で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 関数よりも優先されます。

また、std::string で scanf を使用しないでください。scanf の代わりに std::cin を使用し、printf の代わりに std::cout を使用してください。

于 2013-01-29T03:47:51.063 に答える