c ++:从嵌套的do-while循环到嵌套的while循环

时间:2014-04-01 17:43:14

标签: c++ nested do-while

我在c ++中有这个猜谜游戏程序。 我是在嵌套的do-while循环中完成的。 如何在 while循环中而不是在while时进行?

7 个答案:

答案 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循环首先检查条件,然后在条件满足时执行某些操作。这感觉就像是一项任务(或练习),所以我不会写它,但你应该有足够的信息来解决这个问题:)