使用while(cin>> x)

时间:2012-08-11 09:29:20

标签: c++ string cin

  

可能重复:
  C++ cin whitespace question

我在尝试理解这段代码时遇到了问题。如果这个问题已经得到解答,我想道歉,但我没有在任何地方找到它。我是初学者,它是一个非常基本的代码。问题是>> 运算符在第一个空格时停止读取 遇到了字符,但为什么在这种情况下它会输出完整的输入字符串,即使我们的字符串中有空格也是如此。它以单独的行输出字符串的每个单词。如果 cin>> x 即使在空格之后也可以输入? Plz帮我解决了这段代码的功能。提前谢谢。

#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;
}

3 个答案:

答案 0 :(得分:2)

  

问题是&gt;&gt;操作员在第一个空格时停止读取   遇到了字符,但为什么在这种情况下它会输出   完整的输入字符串,即使我们的字符串中有空格

因为你在循环中使用它。所以每次cin左右吃一个你打印的单词并丢弃空格。您在每个单词后面打印换行符这一事实意味着您不希望看到空格 - 实际上s不包含空格。

测试这个的简单方法是打印:

cout << s << "$";

然而,代码最有趣的特性是while如何测试istream返回的<<,它在布尔上下文中准确地产生你想要的:输入是完成的还是不

答案 1 :(得分:1)

默认情况下,在流上使用输入运算符会在空格处停止,并跳过前导空格。所以,既然你在循环中阅读,它会在读取你输入的所有“单词”时跳过空格,然后用循环换行符在循环内打印。

答案 2 :(得分:1)

您可能忽略了这样一个事实,即无论何时输入新字符串(在空格字符之后,即换行符,制表符或空格键),都会将其重新分配给字符串s while 循环条件。要验证这一点,您可以执行以下操作:

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

而不是:

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

运行这个,一切都会非常明确:)