我的程序忽略了第二个循环而我无法填充向量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);
}
答案 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的性质。