登录时向量下标超出范围

时间:2016-01-21 20:14:29

标签: c++ vector range

我搜索过类似的错误,但找不到与我的代码相关的答案。 我有一个登录系统,其中名称和密码从文件读入矢量。 然后,我计算向量并匹配用户名和密码,然后我可以使用向量中保存的任何名称/密码组合登录我的程序,但是,如果我要输入的内容未包含在向量或文件中这件事会引发一个运行时错误,即矢量超出范围。 请任何人都可以帮助我如何捕捉向量之外的用户输入。我希望这是有道理的。在此先感谢,让我们看看这次我可以获得多少票。洛尔。

抱歉,我没有发布任何代码,我在桌面上发布了问题,代码在我的笔记本电脑上。感谢。

 void loginScreen()
{
    vector <string> MyVec;
    string unTemp;
    string pwTemp;
    bool correct = true;


    cout << "Enter Your Username: ";
    cin >> unTemp; cout << endl;
    cout << "Enter Your Password: ";
    cin >> pwTemp;

    fstream admin("admin.txt", ios::in || ios::out || ios::app);


    while (admin >> userName >> password)
    {
        MyVec.push_back(userName + " " + password);
    }

    admin.close();



    for (vector<string>::const_iterator i = MyVec.begin(); i != MyVec.end(); ++i)

    {
        for (int j = 0; j <= MyVec.size(); ++j)


        do{


        if (MyVec[j] == unTemp + " " + pwTemp)
            {
                cout << MyVec.size() << endl;
                cout << MyVec[j] << endl;
                correct;

                mainMenu();

            }



            else 
            {
                !correct;

            }


        } while (!correct);

    }

    }

1 个答案:

答案 0 :(得分:1)

你的问题是

        for (int j = 0; j <= MyVec.size(); ++j)

应该是

        for (int j = 0; j < MyVec.size(); ++j)

使用'&lt; ='结束循环是一个巨大的红旗。几乎所有循环都从0开始,并由< limit终止。

鉴于您只使用j索引到MyVec,使用基于范围的for循环会更好:

        for (const auto &c : MyVec)

另外,你说的地方

         correct;
         ....
         !correct

这只是意味着“评估correct的当前值并将结果抛弃”。我想你的意思是

         correct = true;
         ....
         correct = false;

......实际上改变了价值!