2

ユーザーがスペースを含む文を入力すると、while ループはこれらのスペースの 1 つで停止します。なぜこうなった?「\0」とスペースは同じですか、それとも何か間違ったことをしましたか?

int main ( )
{
    char user_input[200];
    cin>>user_input;
    int i=0;
    while(user_input[i]!='\0')
    {
        i++;
    }
    cout<<i;
    return 1;

}

皆さん、ありがとうございました。

4

3 に答える 3

9

\0ASCIIコードのヌル終了文字です0。スペースはASCII32の別の文字だと思います。実際、あなたはこれをやっています。

cin >> user_input;

スペースを押すかEnterキーを押すまで入力が必要です。したがって、user_input文字列にスペースはありません。の代わりにこれを使用してくださいcin

cin.getline (user_input, 200, '\0') ;
于 2012-10-22T15:09:09.900 に答える
3

>>これは、 char配列を使用して読み取る際の問題です。トークン化すると空白で分割されます。user_inputこれを確認するには、画面に印刷してみてください。

getlineこのコンテキストでは、一般的にinto aを使用するstd::string方が安全です(daknøkが述べたように)。そして、入力はキャリッジリターンによって終了する可能性が高いと思いますか?

std::string user_input;
std::getline( std::cin, user_input, '\n' );
于 2012-10-22T15:09:16.430 に答える
1

これは、空白が入力されると入力の読み取りが停止するためです。使用できます

cin.unsetf(ios::skipws)

デフォルトでは、空白をスキップするように設定されています。これにより、目的の結果が得られます。

于 2012-10-22T17:12:39.507 に答える