是什么导致无限循环

What Is Causing Infinite While Loop

本文关键字:无限循环 是什么      更新时间:2023-10-16

我正在创建一个游戏,让两个人玩来猜一个数字,我让它使用if语句,但如果玩家2弄错了,我希望他们能够再次猜测,直到他们猜对为止。我决定使用while循环,但我得到了一个无限的文本循环,我该怎么做才能阻止它?

这是我的代码:(我在处理while循环时注释掉了if语句)

#include <iostream>
using namespace std;
int main() {
    int player1; //Number variable 1
    int player2; //Number variable 2
    cout << "Player 1 type in a number between 1 and 100: "; //Asks player to enter a number
    cin  >> player1;
    system("CLS");
    cout << "Player 2 guess the number between 1 and 100: "; //Asks guess a number
    cin >> player2;

    while(player2 != player1)
    {
       cout << "Player 2 guess the number between 1 and 100: ";
    }
    system("pause");
    system("pause"); //Keeps window on screen
    return 0;
}

此外,任何关于如何使我的代码变得更好的反馈都将不胜感激。

有两件事出错

  1. while循环的大括号
  2. 您不会在循环中再次读取用户输入

修改循环如下。。

    while(player2 != player1)
    {
        cout << "Player 2 guess the number between 1 and 100: ";
        cin >> player2;
    }

问题是在while循环中,您永远不会更改player1player2的值。因此,如果它们第一次不相等,它们将永远不相等,代码将无限循环。要解决此问题,您需要将更改值的代码移动到循环的主体中。因此,用户有机会更改这些值。

do {
  cout << "Player 2 guess the number between 1 and 100: "; //Asks guess a number
  cin >> player2;
  if (player2 == player1)
    cout << "Correct!" << endl;
  else
    cout << "Wrong, try again" << endl;
} while(player2 != player1)

如果在while语句后不使用大括号,它只引用以下表达式。

此外,过了一段时间,你就不会再从用户那里读取数据了,那么你希望player2会发生什么变化呢?

就代码组织而言,最好将player2设置为明显无效的值,如-1,并在开头使用while,而不使用之前的read-and-if语句,这样就不必使用特殊大小写。

试试这个。。。

do
{
  cout << "Player 2 guess the number between 1 and 100: "; //Asks guess a number
  cin >> player2;
} while (player2 != player1)

您的花括号位于错误的位置,并且您在第一次之后从未读取玩家的输入。

如果你这样改变,第二个玩家会被再次询问。

while(player1 != player2){
    cout << "Player 2 guess the number between 1 and 100: ";
    cin >> player2;
}

此外,您应该添加一些基本的错误处理,例如检查是否设置了cin.error()标志。

您的while没有括号,这使得它后面的行永远重复!

player 2 guesscoutcin放入do-while循环中,然后验证条件。

cout << "Player 1 type in a number between 1 and 100: "; //Asks player to enter a number
cin  >> player1;
system("CLS");
do {
    cout << "Player 2 guess the number between 1 and 100: ";
    cin >> player2;
} while(player2 != player1);

在中

while(player2 != player1)
{
cout << "Player 2 guess the number between 1 and 100: ";
}

循环中的任何内容都不会更改player2player1,因此如果条件player2 != player1为真,则它将保持为真。

循环

while(player2 != player1)
{
   cout << "Player 2 guess the number between 1 and 100: ";
}

是一个无休止的循环,因为变量player2和player1在循环内部不会更改。如果while条件在进入循环时为true,则它将永远保持为true。

更新:

为了允许player2重复猜测,从而更改他猜测的数字并退出while循环,请在cout语句后添加cin >> player2;

while(player2 != player1)
{
    cout << "Player 2 guess the number between 1 and 100: ";
    cin >> player2;
}