Значение переменной input
никогда не изменяется в цикле, поэтому условие завершения input != secretNumber
никогда не выполняется.
Вы должны взять вход внутри цикла. Поэтому напишите cin >> input
в начале цикла.
Edit:
Если компьютер должен догадаться, то все равно значение input
необходимо изменить в цикле, которого нет в вашем коде. Цикл работает с тем же значением в input
каждый раз.
Чтобы сделать ваш компьютер догадкой, вы должны следовать некоторой схеме. Компьютер может рисовать числа в произвольном порядке, которые вы можете получить, перемещая secretNumber = rand()%100 + 1
внутри цикла. Но этот подход может не сработать, цикл может продолжаться очень долго. Это показано в ответе @ Kaii.
Более эффективным подходом является Binary Search . В этом случае вы должны отслеживать догадки компьютера. Оставьте две переменные high
и low
, которые должны хранить предположения выше и ниже, чем input
соответственно. Когда предположение превышает число, сохраните его в high
и сохраните любое предположение ниже input
в low
. Затем компьютер должен попробовать новое предположение между high
и low
. Случайное предположение должно быть secretNumber = low + rand() % (high - low)
. В худшем случае это займет целых 100 итераций. Для достижения наилучших результатов каждое предположение должно быть (high + low) / 2
. Согласно условиям, один из high
и low
будет обновляться на каждой итерации. Этот подход гарантирует, что компьютер будет угадывать правильное число в течение 7 догадок.
В вашем коде это должно быть так:
int secretNumber = rand() % 100 + 1; // random number between 1-100
int tries=0;
int input;
int low = 1, high = 100;
cout <<"typ your number\n";
cin >> input;
do
{
secretNumber = (high + low) / 2;
cout << secretNumber <<endl;
++tries;
if (secretNumber > input)
{
cout << "Too high I guess?\n";
high = secretNumber;
}
else if (secretNumber < input)
{
cout << "Too low I guess?\n";
low = secretNumber;
}
else
{
cout << "Yes, i got it in " << tries << " tries!";
}
} while (input != secretNumber);
return 0;