带有do函数的无限循环

Infinite loop with do function

本文关键字:无限循环 函数 do 带有      更新时间:2023-10-16

我对C++和编程非常陌生,需要一些帮助。我不明白为什么当电脑猜到我的号码时,它会无限循环。目前,我已经在末尾添加了一个break函数。如有任何建议,我们将不胜感激。

// Computer guesses number
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(0))); // Generates random number
int myNumber; // My number.
int computersNumber = 0; 
int tries = 0;
int highest = 100; // Highest number the computer has put.
int lowest = 1; // Lowest number the computer has put.
cout << "tHello, in this game the computer will try to find your number.nn";
cout << "Please insert your number ( 1 - 100 ): ";
cin >> myNumber; // My number, that the computer is going to guess.
while (myNumber <= 0 || myNumber >= 101) // Checks if user has inputed a legal number.
{
cout << "You entered an illegal number. Please type a new one.n";
cin >> myNumber; // If user made an illegal choice it asks to input a new one.
} 
do
{
int computersNumber = rand() % (highest - lowest) + lowest;
++tries; // adds +1 every time computer guesses wrong number.
if (myNumber > computersNumber)
{
cout << "The computer guessed: " << computersNumber << "n";
lowest = computersNumber + 1;
}
else if (myNumber < computersNumber)
{
cout << "The computer guessed: " << computersNumber << "n";
highest = computersNumber - 1;
}
else
{
cout << "Computer guessed your number in " << tries << " tries.n";
break; // infinite loop if this wasn't here.
}
} while (myNumber != computersNumber);
return 0;
}

您在循环中声明了另一个名为computersNumber的变量。while语句中使用的computersNumber是您在主函数中声明的另一个变量。

您可以通过在循环中使用相同的变量来解决此问题:

更改此行

int computersNumber = rand() % (highest - lowest) + lowest;

并移除CCD_ 3关键字。

computersNumber = rand() % (highest - lowest) + lowest;

您可以在以下链接中阅读有关变量作用域的更多信息:
https://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm

您正在do循环中声明一个新变量:int computersNumber = rand() % (highest - lowest) + lowest;

此定义在循环范围内,在do { }块外不可见。

您的while (myNumber != computersNumber);条件是根据循环外的int computersNumber = 0;定义进行检查,该定义始终为0。

修复方法是重用循环中的现有变量,而不是创建新的变量,因此从以下行中删除int

int computersNumber = rand() % (highest - lowest) + lowest;

而是使用

CCD_ 11。

您的问题是在do-while循环中重新声明computersNumber。这创建了do-while中所有内容都使用的变量的新的本地实例,但while()语句本身中的条件仍然引用main()方法中声明的computersNumber变量,该方法没有更改,因为int computersNumber = rand() % (highest - lowest) + lowest;方法告诉C++在do-whil循环中创建一个新变量,而不是修改main中的原始变量。

要修复它,请更改此行:

int computersNumber = rand() % (highest - lowest) + lowest;

对此:

computersNumber = rand() % (highest - lowest) + lowest;

您在两个位置声明computersNumber。所以你有一个设置为零,int computersNumber = 0;,在另一个点,你给int computersNumber = rand() % (highest - lowest) + lowest;分配一个随机数。

一个被设置为零的是您正在检查的,因为被设置为随机数的那个只有它被设置的每个迭代的范围。这意味着循环外的computersNumber总是零,而循环内正在创建一个具有随机值的新computersNumber。所以只要myNumber没有设置为零,就会有一个无限循环。

要解决此问题,只需从int computersNumber = rand() % (highest - lowest) + lowest;中删除int,使其成为computersNumber = rand() % (highest - lowest) + lowest;,每次循环时,都会将computersNumber设置为随机值,如果该随机值与myNumber匹配,则会中断循环。