1

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

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

我在一行上输入“word1 word2 word3”,预期的输出是

word1
word2
word3

当然,现在我可以得到与for (int i=0; i <3; i++){cin>>input; cout << input<<endl;}.

这让我想到了我的问题。一旦 cin 用完从标准输入读取的内容,它就会查询用户(标准输入)。

我是一种检测 cin 是否会从标准输入缓冲区读取内容或查询用户的方法。

我知道这是一个简单的问题,但它用于家庭作业......而且我正处于一个巨大的工作引发的时间紧缩中,所以对分享权力的人表示敬意!

4

1 回答 1

2

您尝试做的事情不能operator>>仅仅因为它不区分不同类型的空白而完成。看看你喜欢的 C++ 标准库中的实现,以下来自 gcc 4.7.2 的 ( bits/basic_string.tcc):

 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         {

如您所见,(第 1029 行)这会在遇到的所有空白处停止(请参阅http://en.cppreference.com/w/cpp/locale/ctype_base ctype_base::space

因此,您要做的是使用getline(遇到换行符时停止)并通过 a 提取stringstream

getline(cin,mystring);
stringstream str(mystring);
while (str >> token) {
  cout << token << '\n';
}
于 2013-02-19T05:53:09.113 回答