C++ C++;只有第一个向量完成,向后推,cin,for循环

C++ C++;只有第一个向量完成,向后推,cin,for循环,c++,vector,cin,push-back,C++,Vector,Cin,Push Back,我确信我犯了一些明显的错误。我用谷歌搜索了我的问题,但找不到类似的问题;如果它在某处,我会道歉。 基本上,我只想完成一系列向量的条目。程序编译好了,我可以完成第一个向量;然而,它跳过了第二个和第三个向量,节目就结束了。如果我输入cout temp\u int1,我可以让它工作; int1.推回(温度int1); } 向量int2; int temp_int2=0; for(无符号整数计数器3=0;计数器3>温度int2; int2.推回(温度int2); } 返回0; } 我只是在玩代码,遇到

我确信我犯了一些明显的错误。我用谷歌搜索了我的问题,但找不到类似的问题;如果它在某处,我会道歉。 基本上,我只想完成一系列向量的条目。程序编译好了,我可以完成第一个向量;然而,它跳过了第二个和第三个向量,节目就结束了。如果我输入
cout temp\u int1,我可以让它工作;
int1.推回(温度int1);
}
向量int2;
int temp_int2=0;
for(无符号整数计数器3=0;计数器3<10;++counter3)
{
cin>>温度int2;
int2.推回(温度int2);
}
返回0;
}
我只是在玩代码,遇到了这个。。。
我相信这是显而易见的,但任何帮助都是感激的

我们不确定是否是这种情况,但您正在调用
attr1
向量上的push back,但可能希望在上面创建的向量上调用它-
int1


第二个循环也是如此。

提取字符串后,需要删除下线字符

getline(cin, temp_name);
name.push_back(temp_name);

// Add this line
cin.ignore(1);

当你开始输入第二个向量时,你似乎正在输入一些不是数字的数据。在这种情况下,输入流获得错误状态并忽略所有其他输入

您可以通过插入另外一对语句来检查此假设

vector<int> int1;
int temp_int1 = 0;
if ( !cin ) cout << "Some error occured" << std::endl;
for (unsigned int counter2 = 0; counter2 < 10; ++counter2)
{
    cin >> temp_int1;
    int1.push_back(temp_int1);
}

vector<int> int2;
int temp_int2 = 0;
if ( !cin ) cout << "Some error occured" << std::endl;
for (unsigned int counter3 = 0; counter3 < 10; ++counter3)
{
    cin >> temp_int2;
    int2.push_back(temp_int2);
}
vector int1;
int temp_int1=0;
如果(!cin)不能满足温度输入1;
int1.推回(温度int1);
}
向量int2;
int temp_int2=0;
如果(!cin)不能满足温度输入2;
int2.推回(温度int2);
}

感谢Bartlomiej Lewandowski的回复;不幸的是,这只是我的文章中的一个输入错误,我更改了attr1和attr2,只是为了更清楚地说明它们是这篇文章的整数向量。在我试图编译的代码中,它们都匹配。很抱歉。你是如何测试的?谢谢弗拉德;事实的确如此。好处是我更多地了解了cin的工作原理以及编写代码抵御误用的重要性!非常感谢大家的反馈。
vector<int> int1;
int temp_int1 = 0;
if ( !cin ) cout << "Some error occured" << std::endl;
for (unsigned int counter2 = 0; counter2 < 10; ++counter2)
{
    cin >> temp_int1;
    int1.push_back(temp_int1);
}

vector<int> int2;
int temp_int2 = 0;
if ( !cin ) cout << "Some error occured" << std::endl;
for (unsigned int counter3 = 0; counter3 < 10; ++counter3)
{
    cin >> temp_int2;
    int2.push_back(temp_int2);
}