Как рано завершить цикл, если пользователь говорит на C ++

0

Примечание. Это домашнее задание.

Я пытаюсь сделать программу, которая играет в игру Pig! Свинья - игра со следующими правилами:

1. First to get 100 GAME POINTS is the victor. 2. On your turn, you roll a dice. If you get a 1 at any roll, you end your turn and add 0 to your GAME SCORE. 3. If you roll any value other than a 1, you have the option to HOLD or PLAY. If you PLAY, your roll is added to your TURN SCORE and you roll again. If you HOLD, your TURN SCORE is added to your GAME SCORE and the turn passes to the computer.

Игра идет очень легко, пока я не перейду к следующей проблеме (см. Код):

int player(){
    char PlayAgain = 'Y';
    int turn_score = 0;
    while (PlayAgain != 'N' || PlayAgain != 'n'){
        int dice;

        srand(time(NULL));
        dice = rand() % 6 + 1;
        turn_score = turn_score + dice;

        if (dice != 1){
            cout << "You rolled a " << dice << "! Would you like to roll again? [Y/N]: ";
            cin >> PlayAgain;
            if (PlayAgain == 'N' || PlayAgain == 'n'){
                /*END TURN AND return turn_score;*/
            }
        }
        if (dice == 1){
            cout << endl << "Oops! You rolled a 1! Your turn is ended, and you add nothing to your score.\n";
            system("PAUSE");
            /*END TURN, NO SCORE ADDED*/
        }
    }
}

Как я могу заставить программу закончить цикл преждевременно (если либо воспроизвести HOLDS или Dice == 1) и вернуть правильное значение (если HOLD, return turn_score. Else return 0)? [См. Два отмеченных раздела]

  • 0
    Используйте оператор break когда условие выполнено.
  • 0
    @Zaphod Это не позволило бы мне возвращать значение в зависимости от ситуации , в while , было бы это? Если нет, то перерыв не достигает того, что мне нужно.
Показать ещё 6 комментариев
Теги:

3 ответа

1

Вы можете использовать break для выхода из цикла. Поскольку вы говорите, что хотите вернуть "правильное значение", вы должны сделать что-то вроде этого:

В первом условии if

if (PlayAgain == 'N' || PlayAgain == 'n'){
            /**Game-Specific logic here**/
            return turn_score
        }

а на втором:

if (dice == 1){
        cout << endl << "Oops! You rolled a 1! Your turn is ended, and you add nothing to your score.\n";
        /**Game-Specific logic here**/
        cin.get();
        return turn_score;
    }

Оператор return не должен находиться в конце функции, и более чем один оператор возврата может сосуществовать внутри одной и той же функции

  • 0
    Это имеет смысл, я думаю, я думал, что return не может быть в цикле. Таким образом, return немедленно завершает функцию?
  • 0
    Да. Но имейте в виду, что вы также можете останавливать петли с разрывом. Иногда вы хотите завершить цикл без завершения функции
0

Вместо того, чтобы исправить ваш код, я хотел бы дать вам понять, что на самом деле нужно здесь.


Когда-либо слышал о break; statement.Пожалуйста, ознакомьтесь с простым примером, см. следующий фрагмент кода, в котором ваша программа принимает данные от пользователя, и продолжает принимать данные от пользователя до тех пор, пока вы не нажмете "A",

char var;
while(true)
{
cin>>var;
if(var=='A') break;
}

Теперь в этой программе цикл while установлен в true и будет продолжать работать и принимать входные данные от пользователя, а оператор if не будет работать до тех пор, пока пользователь не введет "A". И в тот момент, "A" задается в качестве входных данных, break будет взять контроль из в while циклы для вас.

0

Как насчет того, чтобы ваш оператор return (с правильным значением в зависимости от случая) внутри вашего цикла? Это сломает как цикл, так и функцию, но возвращает требуемое значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню