0

コード

次のプログラムを作成しました。

#include <iostream>

void f(char v[])
{
    for(char* p = v; *p != 0; p++)
    {
        std::cout << *p << std::endl;
    }
}

int main()
{
    std::cout << int(' ') << std::endl;
    char c[256];
    std::cin >> c;
    f(c);
    return 0;
}

コンパイラ

GNUGCCコンパイラを使用してCode::Blocksで-std=c ++ 0xフラグを使用してコンパイルしました(警告なし)。

問題

私が抱えている問題は、1つ以上のスペース(つまり「1と2」)を含む文字列を入力すると、最初のスペースの前の文字だけが印刷されることです(つまり、「o」、「n」、「e」)。

私が試したこと

頭に浮かんだのは、簡単なリアリティチェックを行うことだけでした。次の行を追加しました:

std::cout << "Val: " << int(' ') << std::endl;

そして、予想通り、出力される値は0ではありません(明らかに、nullの「\ 0」文字ではないため)。..

何が欠けているのかわかりません。次の行の場合ですか?

std::cin >> c;

ある種の終了文字として''を使用しますか?

ありがとう。

4

3 に答える 3

2
std::cin >> c;

空白で区切られた1つの単語のみを読み取ります。これがすべての>>オペレーターの機能です。

行全体を読みたい場合は、getline代わりに関数を使用してください。

于 2013-01-21T10:40:45.240 に答える
2

ストリーム演算子>>フォーマットされた入力であり、フィールドの区切り文字として空白を使用します。入力に空白を保持する場合は、std::getline()またはストリームメンバー関数を使用しますread()

于 2013-01-21T10:41:16.363 に答える
1

文を入力してみてくださいgetline。スペースは、による入力間の区切り文字として使用されcin>>ます。

于 2013-01-21T10:41:04.597 に答える