Выход из функции в C ++ - PullRequest
       5

Выход из функции в C ++

0 голосов
/ 22 декабря 2018

Хорошо, поэтому я пишу код для подтверждения имени пользователя и пароля.Я использую связанные списки для сохранения информации и запрашиваю у пользователя имя пользователя и пароль, которые должен подтвердить код.

Честно говоря, я не знаю, что не так с этим кодом

Он прекрасно работает, когда я ввожу правильное имя пользователя или пароль.

Но если это неправильно в первый раз изатем я ввожу правильную информацию, код подтверждает ее правильность, а затем снова запрашивает правильный пароль.

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 голосов
/ 22 декабря 2018
bool a;

a не инициализируется.И он не инициализируется, если ввод не проходит проверку, прежде чем он будет использован.Он инициализируется только при вызове confirmAdmin() и только при условии правильного ввода.

a в конечном итоге используется без предварительной инициализации.Неопределенное поведение.

В confirmAdmin() также есть пути выполнения, которые не возвращают значение из этой функции, поэтому a может оставаться неинициализированным даже в этом случае.Еще более неопределенное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...