我在c ++中有这个猜谜游戏程序。 我是在嵌套的do-while循环中完成的。 如何在 while循环中而不是在while时进行?
答案 0 :(得分:1)
我为你的游戏循环创建了一个功能,让一切都更清晰。另请注意,srand()正在寻找unsigned int。
#include <iostream>
#include <string>
#include <ctime>
using namespace std;
void rungame()
{
int num = rand() % 10 + 0;
int guess = -1;
cout << "Guess a number between 0 - 10 : "<<endl;
while (guess != num)
{
cin >> guess;
if (guess > num)
{
cout << "Your guess is high . Guess again !"<<endl;
}
if (guess < num)
{
cout << "Your guess is low . Guess again !"<<endl;
}
}
}
int main()
{
srand( (unsigned int) time(NULL) );
string choice = "Yes";
while (choice == "Yes")
{
rungame();
cout << "That is Correct, You win"<<endl;
cout <<"\nWould you like to give the game another try ? (Yes or no)"<<endl;
cin>>choice;
}
return 0;
}
答案 1 :(得分:0)
您需要将用于猜测数字的代码放入函数中(例如guessTheNumber
)。最初调用一次。在它退出循环后,它将从函数返回。在该函数调用之后,询问用户是否要再次尝试。如果是,则再次调用该函数(例如guessTheNumber
),直到用户拒绝为止。一旦他们拒绝,退出你的计划。这会将其减少到一个do/while
循环。
伪代码:
int main()
{
guessTheNumber();
Do you want to guess again?
if choice is yes, call guessTheNumber();
else
return 0;
}
答案 2 :(得分:0)
你必须来自新加坡..无论如何,你可以试试这个。
cout << "Guess a number between 0 - 10 : "<<endl;
cin >> guess;
while(true)
{
if (guess > num)
cout << "Your guess is high . Guess again !"<<endl;
else if (guess < num)
cout << "Your guess is low . Guess again !"<<endl;
else
{
cout << "That is Correct, You win"<<endl;
cout <<"\nWould you like to give the game another try ? (Yes or no)"<<endl;
cin>>choice;
if (choice.compare("no")==0 //If user enter any other inputs, game continues
break;
}
cin >> guess;
}
有几种方法可以实现这一点。在您的情况下,由于您已经在检查条件是否num == guess,您可以删除while循环中的检查。使用while循环仅用于循环。
明确地将“猜测”设置为不可能是“num”(例如,设置猜测= -1)的数字感觉像硬编码一样。 :-P
答案 3 :(得分:0)
确保在while语句之前存在逻辑默认值。除此之外,代码是你的。
#include <iostream>
#include <string>
#include <ctime>
#include <stdlib.h>
using namespace std;
int main()
{
srand(time(0));
int guess;
string choice , name;
cout << "What is your name ?"<<endl;
cin>>name;
cout << "*******************************"<<endl;
cout << "Welcome to the Hi-Lo Game , "<<name<<endl;
cout << "*******************************"<<endl;
choice = "Yes";
while (choice=="Yes")
{
int num = rand() % 10 + 0;
cout << "Guess a number between 0 - 10 : "<<endl;
guess = -1;
while (guess !=num)
{
cin >> guess;
if (guess > num)
{
cout << "Your guess is too high . Guess again !"<<endl;
}
else if (guess < num)
{
cout << "Your guess is too low . Guess again !"<<endl;
}
else
{
cout << "That is Correct, You win"<<endl;
}
}
cout <<"\nWould you like to give the game another try ? (Yes or no)"<<endl;
cin>>choice;
}
return 0;
}
答案 4 :(得分:0)
虽然循环的迭代次数事先不知道,但通常使用循环,但取决于指定条件的满足。 while循环的基本形式:
while(条件)
{
block of statements
}
块后面的语句
•在语句块开始时测试的这些类型的循环条件中,循环重复直到满足条件。 •条件是一个逻辑表达式,其结果必须是逻辑数据(类型为bool)。当结果变为逻辑假(false,0)时,跳过块命令循环并且程序从循环的语句块之后的第一个语句继续。 •就像在开始时测试条件的循环中一样,循环中的语句块甚至不会执行一次。
答案 5 :(得分:-1)
将嵌套循环替换为以下循环。 (只有嵌套的一个,而不是第一个Do-while,正如你在上面的评论中所说的那样)
guess=-1; //
while(guess!=num)
{
cin >> guess;
if (guess > num)
{
cout << "Your guess is high . Guess again !"<<endl;
}
else if (guess < num)
{
cout << "Your guess is low . Guess again !"<<endl;
}
else
{
cout << "That is Correct, You win"<<endl;
}
}
答案 6 :(得分:-2)
在用户说要再次播放后设置方式,您需要重新初始化num
,否则guess
将始终等于num
。
之后将guess
设置为num
永远不会像-1的那样。
还要考虑一段时间的不同之处。做一次做什么,然后检查一个条件。 while循环首先检查条件,然后在条件满足时执行某些操作。这感觉就像是一项任务(或练习),所以我不会写它,但你应该有足够的信息来解决这个问题:)