0

重複の可能性:
C++ cin 空白の質問

このコードを理解するのに問題があります。この質問が既に回答されている場合は申し訳ありませんが、どこにも見つかりませんでした。私は初心者で、非常に基本的なコードです。問題は、>>演算子が最初の空白文字に遭遇したときに読み取りを停止することですが、この場合、文字列に空白が含まれていても完全な入力文字列を出力するのはなぜですか。文字列のすべての単語を別々の行に出力します。空白の後でもcin>>xが入力できるのはどうしてですか? このコードの機能を助けてください。前もって感謝します。

#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::string;
using std::endl;
int main()
{
string s;
while (cin >> s)
cout << s << endl;
return 0;
}
4

3 に答える 3

3

問題は >> 演算子が最初の空白文字に遭遇したときに読み取りを停止することですが、この場合、文字列に空白が含まれていても完全な入力文字列を出力するのはなぜですか

ループで使用しているからです。そのため、印刷するたびcinに単語を食べて空白を破棄します。各単語の後に改行を印刷しているという事実は、空白が表示されることを期待していないことを意味し、実際sには何も含まれていません。

これをテストする簡単な方法は、印刷することです:

cout << s << "$";

ただし、コードの最も興味深い特徴は、ブール値のコンテキストで返されたwhileテストが、入力が完了したかどうかに関係なく、まさに必要なものを生成する方法です。istream<<

于 2012-08-11T09:35:25.553 に答える
1

デフォルトでは、ストリームで入力演算子を使用すると、空白で停止し、先頭の空白をスキップします。したがって、ループで読み取るため、入力したすべての「単語」を読み取りながら空白をスキップし、ループ内で改行を付けて出力します。

于 2012-08-11T09:34:28.097 に答える
1

新しい文字列を入力するたびに(空白文字、つまり改行、タブ、または空白スペースの後)、whileループ条件で文字列 sに再割り当てされるという事実をおそらく無視したでしょう。これを確認するには、次のようにします。

int i=1;
while (cin >> s)
cout << i++ << ": " << s << endl;

それ以外の :

while (cin >> s)
cout << s << endl;

これを実行すると、すべてが明確になります:)

于 2012-08-11T10:46:41.877 に答える