C++ 使用do-while循环和while循环来编写一个程序,该程序将运行随机猜测游戏…我一直坚持do-while循环

C++ 使用do-while循环和while循环来编写一个程序,该程序将运行随机猜测游戏…我一直坚持do-while循环,c++,C++,我一直在玩一个随机猜谜游戏。游戏的秘密号码是由用户输入的从最小到最大的数字,猜测者被要求猜测秘密号码,最后被要求询问他们是否愿意再次玩。如果猜数过高或过低,打印输出也必须有多个选项。无论如何,我希望它检查并确保用户输入的是数字,而不是愚蠢的东西。所以我一直在兜圈子,想弄明白这一部分。我确信这是一个简单的解决办法,但我对编程还不熟悉,这让我感到困惑。任何帮助都将不胜感激 my code should similar to below output images : [1]http://i62.ti

我一直在玩一个随机猜谜游戏。游戏的秘密号码是由用户输入的从最小到最大的数字,猜测者被要求猜测秘密号码,最后被要求询问他们是否愿意再次玩。如果猜数过高或过低,打印输出也必须有多个选项。无论如何,我希望它检查并确保用户输入的是数字,而不是愚蠢的东西。所以我一直在兜圈子,想弄明白这一部分。我确信这是一个简单的解决办法,但我对编程还不熟悉,这让我感到困惑。任何帮助都将不胜感激

my code should similar to below output images :
[1]http://i62.tinypic.com/wjvuqb.png
[2]http://i57.tinypic.com/2nq9jwm.png
[3]http://i62.tinypic.com/210zss7.png

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <string>
using namespace std;

int main()
{
    int min, max, secret=0, deposit, bet, guess;
    bool again= true;

    string name;
    char reply;

    cout<< setw(80)<< setfill('=')<<"\n\n";
    cout<< setw(45)<< "NUMBER GUESSING GAME!"<<"\n\n";
    cout<< setfill('=')<< setw(80)<<"\n\n";
    cout<< "What ur name?\n";
        getline(cin,name);
        Again:
        cout<< "Pls enter the min & max number\n";
        while(!(cin>>min)||min<0)
        {
            cout<<"Min? ";
            cin.clear();
            cin.ignore();   
        }

        while(!(cin>>max)||max<0)
        {
            cout<<"Max? ";
            cin.clear();
            cin.ignore();
        }

        while(!(max> min))  
        {
            cout<<"Min is larger than Max\n";
            goto Again;
        }
    cout<< "\nMin: "<<min<<"\nMax: "<<max<<"\n";


    secret= rand() % max+min; 
    cout<<"Enter ur deposit: ";
    cin>> deposit;

AA:      cout<< setw(45)<< "\n\n\n\nRULES OF THE GAME"<<"\n\n";
         cout<< setfill('-')<< setw(80)<<"\n\n";
         cout<< "Guess number between "<< min<< " to "<< max;
         cout<< "\nIf ur guess match, 10 times ur deposit!!";
         cout<< "\nIf ur guess mismatch, lose ur betting amount!!";
         cout<< "\n\n"<< setfill('-')<< setw(80)<<"\n\n\n";
         cout<< "Current Balance: "<<deposit;
         cout<< "\nWhat is ur betting amount? ";
            cin>> bet;

    do{
            cout<< "\n\nEnter a guess to bet: ";
                cin >> guess;

            if (guess > max)
            {
                cout << "Too high!\n\n";
                cin.clear();
                cin.ignore();       
            }
            else if (guess < min)
            {
                cout << "Too low!\n\n";
                cin.clear();
                cin.ignore();
            }


          }while (guess != secret);

                if(guess != secret){
                deposit-=bet;
                cout << "\nThat's it! You got it!\n";
                cout<<"Sorry, U lose RM "<< bet;
            }
            else{
                bet*=10;
                deposit+=bet;
                cout << "\nThat's it! You got it!\n";
                cout<<"Congratulation! U earn RM "<< bet;
            }

        cout<<"\n\nThe secret number was : "<< secret;
        cout<< "\n\n\tCurrent Balance: "<<deposit<< "\n\n\n";

        do{
            cout<< "Wanna play again (y/n)? ";
            cin>> reply;

            if( reply=='y'){
                again= true;
                goto AA;    
            }
            else
                cout<<"\nReally? Ok, try again! ";  
                cin>>reply;
        }while(again==false && reply=='n');

        if(reply=='n'){     
        cout<<"\n\n\n"<< setw(80)<< setfill('+')<<"\n\n";
        cout<< setw(30)<< "THX FOR PLAYING! UR CURRENT BALANCE IS RM "<< deposit<<"\n\n";
        cout<< setfill('+')<< setw(80)<<"\n";
        }
        return 0;
    }

你在使用goto,如果你在使用goto,猛禽会把你撕成碎片。在任何情况下都不要使用goto


但您可以使用函数使代码更清晰。这面由文字和复制粘贴组成的墙真的很难阅读。

首先,你用来计算随机数的公式是错误的。假设最小值是10,最大值是12。那么兰特%max可能是,比方说,10。加上最小值10,猜测的数字将是20-远远大于最大值。。。它应该是secret=rand%max-min+1+min;如果您的间隔为[最小,最大]

现在回答你的问题-据我所知,你想知道输入的猜测是否是一个数字。以下是您可以做的:

    while(1)
   {
        cin >> guess;

         if(cin){
     if (guess > max){
         cout << "Too high!\n\n";
         cin.clear();
         cin.ignore();
         continue;
     }
     else if (guess < min){
         cout << "Too low!\n\n";
         cin.clear();
         cin.ignore();
         continue;
     }
     else if(guess != secret){
         deposit-=bet;
         cout<< "Sorry, U lose RM "<< bet;
     }
     else if(guess == secret){
         bet*=10;
         deposit+=bet;
         cout<< "\n\nCongratulation! U earn RM "<< bet;
     }
     break;
 }
 else
 {

     cin.clear();
     cin.ignore();
     cout << "Error! You did not enter a number!" << endl;
     continue;
 }
}
这将使回复周期正常工作。您的程序应该由用于不同目的的不同代码块组成,在这个循环中,您将检查答案的正确性与如果答案正确会发生什么混淆了。先做第一件事更容易,然后再做第二件事更容易。使用函数通常可以帮助您做到这一点

编辑3:在新代码中,if语句有很多问题。首先,什么是!>?我想你的意思是<或者不存在,它甚至不会编译。另一件事-当max或min为0时会发生什么?你还没有涵盖这一点

您经常使用if-else链,在这种情况下不一定需要它。例如,您不需要ifmin>0,甚至不需要它之前的else。如果您没有输入其中一条If语句,则输入是正确的,您可以中断,如果您输入其中一条语句,则它将继续;在其中,不执行下面的代码。如果输入是数字,则执行max if else链中的最后一条if语句也是如此

无论如何,你可以做得简单得多。例如,最小循环可以是:

cout << "Pls enter the min of secret number\n";
while (!(cin >> min) || min<=0){

        cout << "Pls enter the min of secret number\n";
        cin.clear();
        cin.ignore();

}

如果您意识到在cin&&min>0时应该中断,您可以看到这将起作用。现在,当你否定它,为了把它作为while条件,它变成!cin | | minguess=-1是什么意思?你好!是的,-1有点毫无意义,我要编辑这个。你还没有移动AA:标签。它应该是这样的:int secret;AA:secret=rand%max-min+1+min;将另一个cin放入else不会解决问题,因为用户可以输入另一个非法符号。我将在编辑中显示此问题的解决方案。另一件事-您使用“再次”标志的目的是什么?当执行goto时,程序的执行永远不会返回到此点。除了这些问题外,该计划似乎工作正常。无论如何,代码应该更干净,结构更好。嗨,“while1”是什么意思?嗨。while1为您提供了一个无止境的循环,只有在输入的猜测正确时,该循环才会被打破。如果没有被打破,该循环将永远执行,因为该条件始终为真。如果你只是输入cin>>猜测;而不是继续;就像您以前做的那样,无法保证下一次输入是正确的。有一个无止境的循环,你可以继续到下一个迭代,直到输入是正确的。我将再做一次编辑,使该剧的角色更加清晰。
cout << "Pls enter the min of secret number\n";
while (!(cin >> min) || min<=0){

        cout << "Pls enter the min of secret number\n";
        cin.clear();
        cin.ignore();

}