Chris Woodward Ответов: 2

Код C++ застрял в бесконечном цикле


#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;

struct Player {
    string name;
    int money;
    string one;
};

char secretPhrase[] = "Easy as pie";
char mask[sizeof(secretPhrase) - 1];


void displayBlankPhrase(char p[], char g)
{
        for (int i = 0; i < sizeof(secretPhrase)-1 ; i++)
        {

            if (secretPhrase[i] == g) 
                mask[i] = g;
        }
        for (int i = 0; i < sizeof(mask); i++)
            cout << mask[i];

        cout << endl;
    }

void init()
{
    //Initialize Mask
    for (int i = 0; i < sizeof(secretPhrase) - 1; i++)
    {
        if (secretPhrase[i] == ' ')
            mask[i] = ' ';
        else {
            mask[i] = '*';
        }
    }
}

bool isGameOver() {
    for (int i = 0; i < sizeof(mask) - 1; i++)
        if(mask[i] == '*')
                    return false;

    return true;
}

int main()
{
    // Initializes mask array
    init();

    //Welcome Screen | This is where you enter player information

    Player one;
    one.money = 0;
    cout << "Welcome to 'Wheel of Fortune'!" << endl;
        cout << "What is your name?: ";
        cin >> one.name;
    cout << "Hello " << one.name << 
        ". You starting amount is $" << Player().money << "." << endl;


    // WHEEL
    int wheelSlots[24];
    wheelSlots[0] = 0;
    wheelSlots[1] = 1;
    wheelSlots[2] = 50;
    wheelSlots[4] = 200;    
    wheelSlots[3] = 1000;
    wheelSlots[5] = 3000;
    wheelSlots[6] = 400;
    wheelSlots[7] = 0;
    wheelSlots[8] = 5000;
    wheelSlots[9] = 600;
    wheelSlots[10] = 10;
    wheelSlots[11] = 300;
    wheelSlots[12] = 500;
    wheelSlots[13] = 8000;
    wheelSlots[14] = 25;
    wheelSlots[15] = 400;
    wheelSlots[16] = 125;
    wheelSlots[17] = 10000;
    wheelSlots[18] = 0;
    wheelSlots[19] = 300;
    wheelSlots[20] = 250;
    wheelSlots[21] = 600;
    wheelSlots[22] = 400;
    wheelSlots[23] = 50;

    int playersMenu = 0;
    int playerOptions;
    char playersChoice;
    bool gamePlay = true;
    bool playerWin = false;
    int playerSpins = 0;
    int spin;
    string playerSolve;

;

while (gamePlay == true && playerWin == false) {
    if (playerSpins < 1) {
        //Checks to see if play has spun the wheel
        cout << "Spin the wheel to start the game..." << endl;
        playerOptions = 2;
        for (int i = 0; i < sizeof(secretPhrase) - 1; i++) {
            secretPhrase[i] = '-';
        }
    }
    else {
        cout << "\n\n Choose an option?: " << endl
            << "1. Guess a letter" << endl
            << "2. Spin the wheel" << endl
            << "3. Buy a vowel (- $500)" << endl
            << "4. Solve the puzzle" << endl;
        cin >> playerOptions;
    }
    playersChoice = '*';
    // Evaluate players options options 1-4
    if (playersMenu == 1) {
        cout << "Guess a letter for $: " << playerSpins;
        cin >> playersChoice;

    }
    if (playersMenu == 2){
        playerSpins++;
    // Random wheel number generator
    spin = rand() % 25;
    cout << endl << "The wheel landed on: $" << wheelSlots[spin] << "." << endl;
    if (spin == 0 || spin == 1) {
        one.money = 0;
        cout << "OH NO! Bankrupt!" << endl;
    }
}

    if(playersMenu == 3){
        one.money -= 250;
        cout << "Here is your money now: $" << one.money << ". " << "Guess a vowel: ";
        cin >> playersChoice;
    }
    if(playersMenu == 4){

        cout << "You want to solve (no caps please and use underscores for spaces):"; // Underscores because of time constraints.
        cin >> playerSolve;
        if (playerSolve == secretPhrase) {
            cout << "You win!" << endl;
            playerWin = true;
            gamePlay = false;
        }
    }
}


return  0;
}


Что я уже пробовал:

Я пытаюсь создать игру wheel of fortune, но у меня возникли проблемы с тем, что мой код застрял в бесконечном цикле после ввода имени игрока. ПОЖАЛУЙСТА, ПОМОГИТЕ!!! Не мог бы кто-нибудь просмотреть мой код или протестировать его в своей собственной среде? Теперь я действительно знаю, чего мне не хватает или что нужно изменить, чтобы вырваться из этого цикла

Andreas Gieriet

Почему вы думаете,что находитесь в бесконечном цикле? Что это за симптом? Какой последний текст вы видите на экране?
Кстати: у вашего игрока нет стартовых денег, и вы не печатаете его деньги (вы должны позвонить one.money и нет Player().money).
У вас также есть неправильный расчет индекса в rand() % 25 - у вас есть только индексы 0...23 так и должно быть ...% 24.
С уважением
Энди

2 Ответов

Рейтинг:
2

W∴ Balboos, GHB

1-Открыть Отладчик
2-установите точку останова при подозрении на проблему
3-запустить программу
4-шаг через цикл и посмотрите, что он не выходит из состояния выхода.


Помните: циклы могут быть созданы вами явно (if, while, do и т. д.), Но они также могут быть результатом обработчиков событий, непреднамеренно. Например, событие on-change, которое само вызывает изменение, может вызывать себя в цикле.


Рейтинг:
0

leon de boer

Начните с очистки кода

void displayBlankPhrase(char p[], char g)

p никогда не используется и, похоже, не имеет никакой функции
cout << "Hello " << one.name << 
        ". You starting amount is $" << Player().money << "." << endl;

Не должен ли игрок (). Money быть одним. money
int playersMenu = 0;
...
// Evaluate players options options 1-4
if (playersMenu == 1) {...
if (playersMenu == 2) {....
if (playersMenu == 3) {...
if (playersMenu == 4) {...

playersMenu начинается с 0, но параметры оператора if, которые вы даете для этого, включают только 1,2,3,4 ... ты потерял меня, он ничего не делает с 0?????

Преобразуйте операторы if в макет switch(playerMenu), который будет намного легче читать.

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