使用时(cin>>x)
Using while(cin>>x)
可能的重复项:
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;
}
问题是>>当第一个空格时运算符停止读取 遇到字符,但为什么在这种情况下它会输出 完整的输入字符串,即使我们的字符串中有空格
因为你在循环中使用它。所以每次cin
吃一个单词,你打印并丢弃空格。你在每个单词后面打印一个换行符的事实意味着你不希望看到空格 - 事实上s
不包含任何空格。
测试这一点的一种简单方法是打印:
cout << s << "$";
然而,代码最有趣的特征是while
如何测试<<
返回的istream
,在布尔上下文中,这些准确地产生你想要的:输入是否完成。
默认情况下,在流上使用输入运算符会在空格处停止,并跳过前导空格。因此,由于您在循环中阅读,因此它在读取您输入的所有"单词"时会跳过空格,然后在循环内用尾随换行符打印它。
您可能忽略了这样一个事实,即每当您输入新字符串(在空格字符之后,即换行符,制表符或空格之后),它都会在while循环条件下被重新分配给字符串s。要验证这一点,您只需执行以下操作:
int i=1;
while (cin >> s)
cout << i++ << ": " << s << endl;
而不是:
while (cin >> s)
cout << s << endl;
运行这个,一切都会非常清晰:)
相关文章:
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- EASTL矢量<向量<int>>连续的
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- cin >> int 给定一个字符串将 int 赋值为 0
- istream std::cin如何修改自定义istream缓冲区
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- Turbo C++ cin() 不能与 gets() 一起使用
- 使用 cin 时接受小数点后的 2 位数字
- 在 std::getline 和 std::cin 期间卡在循环中
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- C++ cin.ignore() 跳过循环
- CIN是逻辑1还是0?
- 如何运行多行 cin?