如何获取两个不同向量的值?

时间:2016-03-28 17:16:04

标签: c++ vector

vector<int> a;
vector<int> b;

int temp_holder;

cout << "\n Give the first ints \n" ;
while (cin >> temp_holder)
    a.push_back(temp_holder);

cout << "\n Give the second ints \n";
while (cin >> temp_holder)
    b.push_back(temp_holder);     

当我按ctrl + z进行第一次while循环时,第二次也会自动结束。发生了什么以及如何解决这个问题,这是使用while(cin >> var);来将值转换为向量的最有效方法         谢谢!

3 个答案:

答案 0 :(得分:2)

使用

std::cin.clear();
循环之间的

答案 1 :(得分:0)

  

当我按下第一个while循环的ctrl + z时,第二个也会自动结束。

CTRL + Z 使cin流状态无效(位于eof)。因此任何进一步的调用,如

cout << "\n Give the second ints \n";
while (cin >> temp_holder)
    b.push_back(temp_holder);    

会失败。

您可以使用std::getline()分别获取第一组和第二组整数值。这需要输入一个空格分隔的数字组,并让用户按 ENTER 键表示输入了整个数组。

然后,您可以根据需要使用std::istringstream将数字提取到矢量。

答案 2 :(得分:0)

你的策略存在缺陷。

第一个while循环只有在没有输入或输入中出现错误时才会结束。

您可以依赖错误来中断循环,清除流的错误状态,忽略该行的其余部分,然后继续读取第二个{{1}中第二个vector的元素循环。

while

使用此方法,您可以使用

cout << "\n Give the first ints \n" ;
while (cin >> temp_holder)
   a.push_back(temp_holder);

// If EOF is reached, there is nothing more to read.
if ( cin.eof() )
{
   // Deal with EOF.
}

// Clear the error state.
cin.clear();

// Ignore the rest of the line.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

// Continue to read the elements of the second vector.
cout << "\n Give the second ints \n";
while (cin >> temp_holder)
   b.push_back(temp_holder);

作为您的输入。 1 2 3 4 5 xxxx 10 20 30 40 50 之前的数字将被读取并存储在第一个向量中,而xxxx之后的数字将被读取并存储在第二个向量中。