从C ++中的函数退出

时间:2018-12-22 15:54:31

标签: c++ function exit

好的,所以我正在编写用于确认用户名和密码的代码。我使用链接列表保存信息,并提示用户输入代码应确认的用户名和密码。

老实说,我不知道这段代码出了什么问题

输入正确的用户名或密码后,效果很好。

但是,如果第一次输入错误,然后我输入正确的信息,则代码会确认其正确,然后再次要求输入正确的密码。

bool List::enterConfirmation(string username, string password, int check)
{
    string userName;
    bool a;
    while (check <= 3)
    {
        ADMINNODEPTR p, q;
        for (q = 0, p = listPtr; p != 0 && p->username != username; q = p, p = p->next);
        if (p == 0)
        {
            cout << "\tInvalid Username. Try again\n\tUsername: ";
            cin >> userName;
            check++;
            enterConfirmation(userName, password, check);
        }
        if (p != 0)
        {
            a = confirmAdmin(p, password, 0);
        }

        if (a == true)
        {
            return true;
        }
        else
            return false;
    }
    cout << "You have exceeded your limit of tries." << endl;
    return false;
}

bool List::confirmAdmin(ADMINNODEPTR p, string password, int check)
{
    string passWord;
    while (check <= 3 && check != -1)
    {
        if (p->passsword == password)
        {
            cout << "Identification Confirmed" << endl;
            check = -1;
            return true;
        }
        else
        {
            cin.ignore();
            cout << "\tERROR: Incorrect Password. Please Try Again\n\tPassword: ";
            getline(cin, passWord);
            if (check < 3)
            {
                confirmAdmin(p, passWord, check);
                /*return false;*/
            }
            if (check > 3)
            {
                cout << "You have exceeded your limit of tries." << endl;
                return false;
            }
        }
    }
}

我本来使代码更短,更整洁并且使用一个函数,但是该函数不会退出(即使在我返回值的地方)这一事实使我发疯。如果可以的话请帮忙。

谢谢

1 个答案:

答案 0 :(得分:0)

bool a;

a未初始化。如果输入在使用前未通过验证,则不会初始化。仅在提供正确输入的情况下,才能通过调用confirmAdmin()对其进行初始化。

a最终没有被初始化就被使用。未定义的行为。

confirmAdmin()中还有一些执行路径未从该函数返回值,因此即使在这种情况下,a仍可能未初始化。更加不确定的行为。