通过istream_iterator获取值后完成cin流
finishing cin stream after getting values by istream_iterator
我有一个关于迭代器的简单问题,在下面的代码中,我使用了三种方法从迭代器的指针中获取值,并将它们放入标准输出或向量中,但是cin流即使在按下enter键后也是连续的。这段代码中的错误....应该是什么提前感谢
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main()
{
vector<double> My_container ;
cout << "Enter values separated by spaces : " ;
#define code1
#ifdef code1
copy (istream_iterator<double>(cin),
istream_iterator<double>(),
ostream_iterator<double>(cout)) ;
#endif // code
/////////////////////////////////////////////////////
#ifdef code2
istream_iterator<double> eos ;
istream_iterator<double> basic_input (cin);
while (basic_input != eos)
{
My_container.push_back(*basic_input) ;
++basic_input ;
}
for (int i = 0 ; i < My_container.size() ; i++)
{
cout << i << " :" << My_container.at(i) << endl ;
}
#endif //code2
//////////////////////////////////////////////
#ifdef code3
istream_iterator<double> stream_end ;
istream_iterator<double> basic_input (cin);
for ( ; basic_input != stream_end; ++basic_input )
{
My_container.push_back(*basic_input) ;
}
for (int i = 0 ; i < My_container.size() ; i++)
{
cout << i << " :" << My_container.at(i) << endl ;
}
#endif //code3
}
你的代码本身并没有错。
你只是通过设计获得这种行为。为什么?因为cin
默认跳过空白。
正如@Veritas所指出的,你必须发出EOF信号。
- 在Windows上:Ctrl-D(实际上是输入-这不是键盘组合)
- 在*nix上:Ctrl-D(实际的键盘组合。从技术上讲,这实际上是一个EOT)
你为什么要这么做?由于cin
默认跳过空白,它如何知道何时停止读取数据?唯一的方法是在数据流中发出信号或输入EOF字符(如上所述)
您正在等待eof以关闭流。按回车是不行的,它只是在流中放入一个换行符。
你必须检查是否有换行符,或者你自己发出信号。
相关文章:
- C++中的cin.ignore()函数不适用于整个流
- 为什么istream不支持右值提取
- 将无符号char*转换为std::istream*C++
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- 需要从 istream 和 ostream 派生 iostream
- 使用std::istream::peek()总是安全的吗
- 使用 istream 参数读取的 istream 函数
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- istream std::cin如何修改自定义istream缓冲区
- 如何使 std::istream 从键盘获取输入(如 std::cin)?
- 将 istream 转换为 ifstream 时将 std::cin 传递到参数时出现问题
- C++: buffer the cin istream
- 将 (cin >> someVar) 的返回分配给 istream 变量时出错 C++
- 我创建的c++istream对象和cin之间的区别在哪里,它在库中的可见位置在哪里
- istream and cin.get()
- 由于 istream 中的杂散 导致 get () 的结果不正确,但 scanf() 或 cin 则不然
- Istream函数参数vs内联std::cin