程序忽略第二个循环

时间:2011-07-10 08:00:55

标签: c++

我的程序忽略了第二个循环而我无法填充向量v2

            vector<int> v1;
    vector<int> v2;
    int elem1,elem2;

    cout<<"Insert v1: ";
    while(cin>>elem1){
        v1.push_back(elem1);
    }

    cout<<"Insert v2: ";
    while(cin>>elem2){
        v2.push_back(elem2);
    } 

3 个答案:

答案 0 :(得分:5)

cin继续前进直到所有输出完成,你的第二个循环永远不会被击中,除非你以某种方式从第一个循环中断。我建议你在第一个循环中有某种退出条件(例如某些输入标记,如'DONE'或其他东西,一旦你读到你应该破坏)。

答案 1 :(得分:0)

我猜你在期望第一个循环结束时输入或其他东西。但那不是你编码的。你编码'填充v1直到没有输入',所以没有任何东西放在v2中就不足为奇了。

也许您可以尝试以下操作,这会读取一行,并将内容放在v1中,然后读取第二行并将内容放入v2中。它使用getline读取单行文本,然后将该行放入字符串流中,您可以一次读取一个数字。

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

void fill_vector_from_one_line(vector<int>& v)
{
    string str;
    if (getline(cin, str))
    {
        istringstream iss(str);
        int elem;
        while (iss >> elem)
            v.push_back(elem);
    }
}

int main()
{
    cout << "Insert v1: ";
    fill_vector_from_one_line(v1);
    cout << "Insert v2: ";
    fill_vector_from_one_line(v2);
}

对于任何错误道歉,我没有检查过这个。

答案 2 :(得分:0)

重置标准输入。见下文。

#include <iostream>
#include <vector>

int main()
{
   std::vector<int> v1;
   std::vector<int> v2;
   int elem;

   std::cout << "Insert v1: ";
   while (std::cin >> elem) {
      v1.push_back (elem);
   }

   // Reset std::cin.
   std::cin.clear();
   std::cin.seekg(0, std::ios::beg);

   std::cout << "Insert v2: ";
   while (std::cin >> elem) {
      v2.push_back (elem);
   }

   // Just to show that it works.
   std::cout << "\nv1 elements:\n";
   for (unsigned int ii = 0; ii < v1.size(); ++ii) {
      std::cout << "v1[" << ii << "] = " << v1[ii] << "\n";
   }

   std::cout << "\nv2 elements:\n";
   for (unsigned int ii = 0; ii < v2.size(); ++ii) {
      std::cout << "v2[" << ii << "] = " << v2[ii] << "\n";
   }

   return 0;
}

请注意,std::cin.clear(); std:cin.seekg();调用具有不同的行为,具体取决于std :: cin的性质。

  • 如果std :: cin绑定到终端,它将完全具有OP正在寻找的行为。
  • 如果std :: cin正在从文件中读取,则vector v2将是vector v1的副本。
  • 如果std :: cin正在从管道读取,则向量v2将为空。你不能在管道上搜索()。