我的main.cpp
调用两个函数来排序整数,由用户在stdin
给出。
问题:: 对SortIteratorAdaptor()
的调用完美无缺,但随后退出而无需等待用户在SortVector()
中的输入。 我认为,这是因为EOF
位于stdin
,导致第二个std::cin
退出而不等待用户的输入。如果是这种情况,那么在`stdin消费EOF
的最佳方式是什么?
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
void SortIteratorAdaptor( void )
{
std::vector<int> v ;
std::cout << "Enter SortIterator Elems\n" ;
std::copy(std::istream_iterator<int> (std::cin),std::istream_iterator<int> (),\
std::back_insert_iterator<std::vector<int> > (v) ) ;
std::sort( v.begin(), v.end() ) ;
std::cout << "Sorted Elems Are:\n" ;
std::copy( v.begin(), v.end(), std::ostream_iterator<int> (std::cout, "\n") ) ;
return ;
}
void SortVector( void )
{
std::vector<int> v ;
int n = 0 ;
std::cout << "Enter Vector elements, Press Ctrl+D to break std::cin\n" ;
while( std::cin >> n ) v.push_back( n ) ;
std::cout << "\n" << "Sorted Elems Are:\n" ;
std::sort( v.begin(), v.end() ) ;
for( n = 0; n < v.size(); n++ ) std::cout << v[n] << "\n" ;
std::cout << "\n\n" ;
return ;
}
int main( int argc, char** argv )
{
std::cout << "Begin Sort Ints with Iterator_Adaptors and vectors\n" ;
SortIteratorAdaptor() ;
std::cout << "Begin Sort Ints with vectors\n" ;
SortVector() ;
std::cout << "Exiting..." ;
return 0 ;
}
答案 0 :(得分:3)
声音就像用std::copy()
std::cin
后,输入流处于失败状态之后(这是好的,否则复制循环不会结束)。
放一个
std::cin.clear();
在此行之后(另见std::istream::clear()
)。