C ++ игра в угадайку чисел - зацикливание стены текста из операторов if - PullRequest
0 голосов
/ 27 июня 2018

Очень плохо знаком с C ++, и это задание для школы. Я должен сделать игру на угадывание, отображающую следующие сообщения:

Снизу слишком холодно (дисплей -----)

Вы горячий на нижней стороне (дисплей ---)

Вы горячий на верхней стороне (дисплей +++)

Вы слишком холодны на старшем роде (дисплей +++++)

ВЫ ТАМ (###### ВЫ ВЫИГРАЛИ ####)

Я продолжаю получать стену "+++++++++ ..." или "------..." после того, как ввожу свое предположение, и я не могу понять, почему. Вот код, который у меня есть:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    int num, guess;
    bool correct = false;

    srand((int)time(0));

    //generating random number 1-100
    num = rand()%100+1;
    cout<<num;

    cout<<"Let's play a game! I'll think of a number and you can try to guess it."<<endl;
    cout<<"Let's begin! I'm thinking of a number 1-100. What's my number?"<<endl;
    cin>>guess;

    while(correct==false)
    {
        if(guess<num)
        {
            cout<<"---";
        }
        if (guess<(num/2))
        {
            cout<<"-----";
        }

        if(guess>num)
        {
            cout<<"+++";
        }

        if (guess>(num+num/2))
        {
            cout<<"+++++";
        }

        if(guess==num)
        {
          cout<<"########YOU WON!########";
          correct=true;
        }
    }
}

Любая помощь будет высоко ценится. Спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

Я не уверен во всех ваших деталях, необходимых для реализации этой игры в догадки, но вот что я могу сказать. Вы получаете бесконечный цикл, когда не угадываете правильный ответ с первой попытки. Это потому, что ваше условие цикла while основано на логическом значении, которое присваивается только внутри условия для угадывания правильного ответа (ваш последний оператор if в цикле while).

Во-вторых, ваши операторы if могут печатать несколько строк за одну итерацию. Например, если пользователь угадывает 10, а случайное число равно 80, первые два оператора if будут истинными, и каждый из них будет напечатан, поскольку 10 < 80 - это истина, а 10 < 80/2 //ie 40 - также истина. Рассмотрите возможность вложения ваших операторов if для каждого условия.

С учетом сказанного, вот реализация, которую я запустил. Пройдите этот код и поймите это. Я добавил подсказку для пользователя в цикле while, чтобы пользователь мог угадывать число, пока оно не станет правильным. Надеюсь это поможет.

ПРИМЕЧАНИЕ : Я не проводил глубокие тесты для этого кода, так как вы обязаны понимать и отлаживать код по мере необходимости, поскольку это задание.

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
int num, guess;
srand((int)time(0));

//generating random number 1-100
num = rand()%100+1;
cout<<num<<endl;

cout<<"Let's play a game! I'll think of a number and you can try to guess it."<<endl;
cout<<"Let's begin! I'm thinking of a number 1-100. What's my number?"<<endl;
cin>>guess;

while(guess != num)
{
    if(guess<num)
    {
        if (guess <(num/2)) 
        {
            cout<<"-----"<< endl;
        }
        else{
            cout<<"---"<< endl;
        }
    }

    if(guess>num)
    {
        if (guess>(num+num/2))
        {
            cout<<"+++++"<< endl;
        }
        else{
            cout<<"+++"<< endl;
        }
    }

    cout<<"Guess again" << endl;
    cin >> guess;
}
cout<<"########YOU WON!########";
}
...