код никогда не будет выполняться?при использовании цикла do / while c ++ - PullRequest
0 голосов
/ 10 февраля 2019

Я добавил цикл do / while в функцию пароля, но она не работает.Я использую xcode10 для кода c ++, и когда я использую точку с запятой после оператора while, он показывает ошибку, в которой говорится, что код никогда не будет выполняться

string password (string g)
{
    string ch = "hello" ;
    cout << "Enter password";
    getline(cin, g);
    do {
        if (ch.compare(g) != 0) {
            cout << " INCORRECT PASSWORD";
            return (0);
        } else {
            cout << "correct password";
            return (string(g));
        }
    } while (ch.compare(g) == 0);  //this is where it shows the error that the code will never exec
}

Я хотел поставить этот цикл и несколько других вещей, чтобы я мог сделать этобесконечный цикл, пока вы не введете правильный пароль.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Оператор Return есть в «if», а также в «else».Вы можете видеть, что независимо от того, что будет результатом ch.compare(g), функция вернется к своему вызывающему.

Именно поэтому она никогда не выполнит «while».

Попробуйте установитьВозврат заявления в другом месте в коде:)

0 голосов
/ 11 февраля 2019

Вам необходимо проверить, получаете ли вы вообще данные, в случае EOF.

string password() { // you don't need g as parameters in, your overwriting it
    string const ch = "hello"; // make ch const to show it not supposed to change
    cout << "Enter password";
    string g; // defining g here since now you need it
    while (getline(cin, g)) { // check that the read from cin is OK
        if (ch != g) { // simple notation for comparing two strings. There's also == available
            cout << "INCORRECT PASSWORD. Please try again\n"; // no return if you want to try again
        } else {
            cout << "correct password";
            return g; // you could also return ch here since they have the same content
        }
    }
    cout << "Unable to read line. aborting\n"; // not really a lot you can do if there is no input to read.
    return string(); // returning empty string.
}
0 голосов
/ 10 февраля 2019

Хорошо, в вашем операторе if вы вернетесь в обоих случаях, вызывая остановку функции, поэтому она никогда не доберется до условия while для ее проверки

  string password(string g)
{
    string ch = "hello";
    cout << "Enter password\n";
    do
    {
        getline(cin, g);

        if (ch.compare(g) != 0)
        {
            cout << " INCORRECT PASSWORD\n";
        }
        else {
            cout << "correct password";
            return (string(g));
        }
    } while (ch.compare(g) != 0);  
}
...