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

时间:2014-02-25 22:52:20

标签: c++ vector cin push-back

我确信我犯了一些明显的错误。我搜索了我的问题,但我找不到类似的问题;道歉,如果它在某处。 基本上,我只想完成一系列向量的条目。程序编译,我可以完成第一个向量;但是,它会跳过第二个和第三个向量,程序结束。如果我在每个向量之间输入cout << "Something" << endl;,我可以使它工作。代码如下:

int main()
{
    vector<string> name;
    string temp_name;
    for (unsigned int counter1 = 0; counter1 < 10; ++counter1)
    {
        getline(cin, temp_name);
        name.push_back(temp_name);
    }

    vector<int> int1;
    int temp_int1 = 0;
    for (unsigned int counter2 = 0; counter2 < 10; ++counter2)
    {
        cin >> temp_int1;
        int1.push_back(temp_int1);
    }

    vector<int> int2;
    int temp_int2 = 0;
    for (unsigned int counter3 = 0; counter3 < 10; ++counter3)
    {
        cin >> temp_int2;
        int2.push_back(temp_int2);
    }

    return 0;
}

我只是玩代码并遇到了这个...... 我确信它显而易见,但任何帮助都表示赞赏!

3 个答案:

答案 0 :(得分:0)

不确定是否是这种情况,但是您正在调用attr1向量,但可能想要在上面创建的向量上调用它 - int1

第二个循环也一样。

答案 1 :(得分:0)

提取字符串后,您需要删除EOL字符。

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

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

答案 2 :(得分:0)

似乎当您开始输入第二个矢量时,您输入的数据不是数字。在这种情况下,输入流会出现错误状态并忽略所有其他输入

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

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);
}