带有do函数的无限循环
Infinite loop with do function
我对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
匹配,则会中断循环。
- 为什么这个递归函数会创建一个无限循环?
- 带有do函数的无限循环
- loop() 函数之外的无限循环
- 具有获取函数的无限循环
- C 递归函数无限循环
- 冰雹序列C 函数需要计算序列的长度.无限循环问题
- 无限构造函数循环
- 开关大小写语句中函数中的字符串输入会导致无限循环和绕过输入
- 实现递归函数,避免由 C++ 中 include 的循环调用(没有 #pragma 一次)引起的无限循环输入
- 当 c++ 布尔函数返回 true 时无限循环
- 第一个函数中的无限循环不知道如何解决
- 无限循环与做而函数
- eof() 函数不起作用 C++ 陷入无限循环
- 从模板类调用函数时形成的无限循环,请任何人解释
- C++字符串替换函数无限循环
- 有什么更有效的方法来确保我不会在这个快速排序函数中陷入无限循环?(C++)
- 这是一个具有基于数组的列表函数的数据结构项目,我似乎无法摆脱这个无限循环。
- C++中的二进制搜索函数返回无限循环
- 这个递归函数(回文)变成了一个无限循环
- 在具有静态对象的类的析构函数中使用 exit(),不会像预期的那样结束无限循环