gpt4 book ai didi

c++ - 通过 istream_iterator 获取值后完成 cin 流

转载 作者:太空狗 更新时间:2023-10-29 20:59:46 26 4
gpt4 key购买 nike

我有一个关于 iterator 的简单问题,在下面的代码中我使用了三种方法从 iterator 的指针中获取值并将它们放入标准输出或 vector 中,但即使按下 enter 键后 cin 流仍然是连续的。这段代码中的错误应该是什么....提前致谢

#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 字符(如上所述)发送或输入到数据流中。

关于c++ - 通过 istream_iterator 获取值后完成 cin 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23887263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com