Я не уверен во всех ваших деталях, необходимых для реализации этой игры в догадки, но вот что я могу сказать. Вы получаете бесконечный цикл, когда не угадываете правильный ответ с первой попытки. Это потому, что ваше условие цикла 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!########";
}