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();
}