我试图用c ++简单地猜测我的数字游戏,但计算机需要猜测我的数字。但问题是我陷入了这种无限循环。我只是一个初学者,所以这是一个非常基本的程序。
这是我的代码:
int secretNumber = rand() %100 + 1; // random number between 1-100
int tries=0;
int input;
cout <<"typ your number\n";
cin >> input;
do
{
cout <<secretNumber <<endl;
++tries;
if (secretNumber > input)
{
cout <<"To high i guess?\n";
}
else if (secretNumber < input)
{
cout <<"To low I guess?\n";
}
else
{
cout <<"Yes, i got it in " <<tries <<" tries!";
}
}while (input != secretNumber);
return 0;
}
答案 0 :(得分:5)
将cin >> input
放入循环体
答案 1 :(得分:4)
我认为你应该在循环中移动随机数生成。
答案 2 :(得分:3)
变量input
的值永远不会在循环中更改,因此永远不会满足终止条件input != secretNumber
。
你应该在循环内部输入。所以在循环开始时写cin >> input
。
修改强>
如果计算机应该猜测,那么仍然需要在循环中更改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;
答案 3 :(得分:2)
计算机只在程序启动时猜测(随机),但每次循环迭代时都要猜测。你应该在循环中移动随机数生成:
int secretNumber = 0;
int tries=0;
int input;
cout <<"typ your number\n";
cin >> input;
do
{
/* the fix is here */
secretNumber = rand() %100 + 1; // random number between 1-100
cout <<secretNumber <<endl;
++tries;
if (secretNumber > input)
{
cout <<"To high i guess?\n";
}
else if (secretNumber < input)
{
cout <<"To low I guess?\n";
}
else
{
cout <<"Yes, i got it in " <<tries <<" tries!";
}
}while (input != secretNumber);
return 0;
答案 4 :(得分:0)
你必须在循环中进行输入。现在你在开始循环之前提示输入一个值,然后再也不要求用户输入另一个数字。如果无法改变猜测,则循环永远不会退出。
更改为
do {
cin >> input;
将解决无限循环。
答案 5 :(得分:0)
代码中的无限循环,因为while的参数始终为true,直到得到真正的数字。
你需要添加另一个参数。例如,您希望将最大尝试次数设置为5次。那就像这样
do{
//do your stuff here
}while((input != secretNumber)&&(tries<=5))
当您输入错误的数字5次时,应用程序将完成