C ++数字猜谜游戏 - 来自if语句的循环文本墙

C++ Number guessing game - looping wall of text from if-statements

对 C++ 很陌生,这是学校的作业。我应该做一个猜谜游戏,显示以下消息:

You are too cold on lower side (display -----)

You are hot on lower side (display ---)

You are hot on the upper side (display +++)

You are too cold on the upper sire (display +++++)

YOU ARE THERE (######YOU WON ####)

在我输入我的猜测后,我总是收到“++++++++++...”或“------...”的墙,我无法弄清楚为什么。这是我到目前为止的代码:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    int num, guess;
    bool correct = false;

    srand((int)time(0));

    //generating random number 1-100
    num = rand()%100+1;
    cout<<num;

    cout<<"Let's play a game! I'll think of a number and you can try to guess it."<<endl;
    cout<<"Let's begin! I'm thinking of a number 1-100. What's my number?"<<endl;
    cin>>guess;

    while(correct==false)
    {
        if(guess<num)
        {
            cout<<"---";
        }
        if (guess<(num/2))
        {
            cout<<"-----";
        }

        if(guess>num)
        {
            cout<<"+++";
        }

        if (guess>(num+num/2))
        {
            cout<<"+++++";
        }

        if(guess==num)
        {
          cout<<"########YOU WON!########";
          correct=true;
        }
    }
}

任何帮助将不胜感激。谢谢!

我不确定实现此猜谜游戏所需的所有详细信息,但我可以说的是。如果您在第一次尝试时没有猜出正确答案,就会陷入无限循环。这是因为您的 while 循环条件基于一个布尔值,该布尔值仅分配给猜测正确答案的条件(您在 while 循环中的最终 if 语句)。

其次,您的 if 语句每次迭代可以打印多个字符串。例如,如果用户猜测 10 并且 运行dom 数字是 80,则前两个 if 语句将为真并且它们将被打印,因为 10 < 80 为真10 < 80/2 //ie 40 也是如此。考虑按条件嵌套 if 语句。

话虽如此,这里是我 运行 的实现。通读这段代码并理解它。我在 while 循环中为用户添加了一个提示,以便用户可以一直猜测数字直到正确为止。希望这可以帮助。

注意我没有运行深​​入测试这段代码,因为你有责任根据需要理解和调试代码,因为它是一个作业。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
int num, guess;
srand((int)time(0));

//generating random number 1-100
num = rand()%100+1;
cout<<num<<endl;

cout<<"Let's play a game! I'll think of a number and you can try to guess it."<<endl;
cout<<"Let's begin! I'm thinking of a number 1-100. What's my number?"<<endl;
cin>>guess;

while(guess != num)
{
    if(guess<num)
    {
        if (guess <(num/2)) 
        {
            cout<<"-----"<< endl;
        }
        else{
            cout<<"---"<< endl;
        }
    }

    if(guess>num)
    {
        if (guess>(num+num/2))
        {
            cout<<"+++++"<< endl;
        }
        else{
            cout<<"+++"<< endl;
        }
    }

    cout<<"Guess again" << endl;
    cin >> guess;
}
cout<<"########YOU WON!########";
}