2012-08-11 133 views
0

可能重复:
C++ cin whitespace question使用while(CIN >> X)

我有问题想了解这段代码。如果这个问题已经得到解答,我想表示歉意,但我没有在任何地方找到它。我是一个初学者,它是一个非常基本的代码。问题是>>当遇到第一个空格 字符时,运算符停止读取,但为什么它在这种情况下会输出完整的输入字符串,即使我们的字符串中有空格也是如此。它以单独的行输出字符串的每个字。 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; 
} 
+1

很多可能的重复的http://计算器。 com/questions/2184125/getting-input-from-user-using-cin?rq = 1 http://stackoverflow.com/questions/2735315/c-cin-whitespace-question?rq=1 – nurettin 2012-08-11 09:53:27

回答

2

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

因为你在循环中使用它。因此,每当cin吃一个字,你打印并放弃空白。事实上,在每个单词后面印刷换行符意味着您不希望看到空格 - 实际上s不包含任何空格。

一个简单的方法来测试,这将是打印:

cout << s << "$"; 

然而代码中最有趣的特点是while如何测试由<<这在布尔上下文正确地产生返回istream你想要什么:输入是否完成。

+0

谢谢,这非常有帮助。 – pratZ 2012-08-11 10:03:15

1

默认情况下在流上使用输入运算符将停止在空白处并跳过前导空白。因此,由于您在循环中读取数据,因此在读取输入的所有“单词”时跳过空格,然后在循环内用尾部换行符打印它。

+0

非常感谢。 – pratZ 2012-08-11 10:04:52

1

你可能忽略了一个事实,只要你进入了一个新的字符串(空格字符后,即换行符,标签或空白空间)在循环它被重新分配给字符串s条件。为了验证这一点,你可以简单地这样做:

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

代替:

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

运行这一点,一切都会一清二楚:)

+0

现在得到一个清晰的图片。谢谢 :) – pratZ 2012-08-11 11:01:34