C++ cin、空格和';缓冲';

C++ cin、空格和';缓冲';,c++,stdin,cin,C++,Stdin,Cin,所以我写了一个非常简单的程序: #include <iostream> #include <string> using namespace std; int main() { string input; cin >> input; cout<< input<<endl; cin >> input; cout<< input<<endl; cin >> input; cout<&l

所以我写了一个非常简单的程序:

#include <iostream>
#include <string>
using namespace std;

int main()
{
string input;

cin >> input;
cout<< input<<endl;
cin >> input;
cout<< input<<endl;
cin >> input;
cout<< input<<endl;
return 0;
}

<>当然,我可以得到与<代码>相同的输出(int i=0;i>输入;cOut),你不能做的事情是不能用<代码>运算符> <代码> >因为它不区分不同的空白。查看你喜欢的C++标准库中的实现,下面是GCC 4.7.2的实现。(
bits/basic_string.tcc
):


如果我正确理解您的问题,您需要
while(std::cin>>输入)std::cout你想要的和你得到的有什么不同?我显然没有很好地表达这一点…我需要读取初始输入中空格之间的所有参数,然后在读取所有参数后停止阅读-当我不知道我将得到的参数数量时。谢谢!那么你怎么知道什么时候应该如果用户可能输入任意数量的参数,请停止?当然,除非您正在谈论通过管道或重定向到stdin(而不是键盘)进行输入,在这种情况下@TonyD的解决方案非常有效,因为完成输入后,您将从输入中获得EOF。否则,您可以定义一个特殊关键字并在((std::cin>>输入)&&(输入!=“停止”)
。这是一个有效的解决方案,正如我所希望的那样优雅。谢谢。好奇的人可能希望他们检查一下:
word1
word2
word3
 995   // 21.3.7.9 basic_string::getline and operators
 996   template<typename _CharT, typename _Traits, typename _Alloc>
 997     basic_istream<_CharT, _Traits>&
 998     operator>>(basic_istream<_CharT, _Traits>& __in,
 999            basic_string<_CharT, _Traits, _Alloc>& __str)
1000     {
...
1027           while (__extracted < __n
1028              && !_Traits::eq_int_type(__c, __eof)
1029              && !__ct.is(__ctype_base::space,
1030                  _Traits::to_char_type(__c)))
1031         {
getline(cin,mystring);
stringstream str(mystring);
while (str >> token) {
  cout << token << '\n';
}