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 回答