如何提示用户重新循环整个程序?

时间:2019-03-03 04:37:20

标签: c++ loops if-statement

我希望用户在再次玩游戏还是结束程序之间进行选择,但是,当系统提示时,如果按“ y”,则一遍又一遍地重复相同的事情,而不是一开始就重复整个程序。我尝试了while循环,do / while循环,if语句,重新排列代码,但没有任何效果。有什么建议吗?

#include <iostream>
#include <string>
using namespace std;

int main(){
    string animal = "fish";
    string guess;
    char choose = 'Y' ;
    int count = 0;//keeps a running total of how many times the user 
has guessed an answer.
    int limit = 5;//allows user to guess only 5 times, otherwise 
they loose the game.
    bool out_of_guesses = false;//to check whether the user has run 
out of guesses.

    cout << "I am thinking of an animal.\n" << endl;

    do{
        while(animal != guess && !out_of_guesses){//Nested while 
loop inside main loop to keep track of how many tries the user has 
attempted and to validate their answers.
        if(count < limit){
            cout << "Can you guess what animal I am thinking of?: ";
            getline(cin, guess);
            count++;
            if(animal != guess){
                cout << "\nHmm, nope. That's not the animal I'm 
thinking of." << endl;
                if(count > 2 && count <5){
                    cout << "I'll give you a hint. It lives in 
water." << endl;
                }
            }
        }
        else{
            out_of_guesses = true;
        }
    }//End nested while loop
        if(out_of_guesses){
            cout << "\nI'm sorry, but you are out of guesses." << 
endl;
        }
        else{
            cout << "\n*** Good job! You guessed the correct animal! 
***" << endl;
            cout << "\t\t><)))º> ❤ <º)))><\t\t" << endl;
        }

    //The do-while loop is there to ask the user if they wish to 
play the game again.
    cout << "Would you like to try again?(y/n): ";
    cin >> choose;
        if(choose == 'N' || choose == 'n')
            break;
    }while(choose == 'Y' || choose == 'y');
    return 0;
}

1 个答案:

答案 0 :(得分:1)

bool out_of_guesses = false;必须在while(true)while(animal != guess && !out_of_guesses)之间,并且不能在第一个while循环之外。因为我们的while循环条件始终为false,然后才将其输入。

您还应该在这两个循环之间重置guess变量,否则在找到答案的情况下可能会发生相同的事情(while循环为false)。

这里的代码带有一些重构/检查,我使用猜测作为大写字母来处理答案的任何排版。我还删除了超出预期的变量,以使用计数并限制一个。

#include <iostream>
#include <string>
#include <cctype>

int main()
{
    const std::string animal = "FISH";
    const int limit = 5;

    do
    {
        std::cout << "I am thinking of an animal.\n";

        int count = 0;
        std::string guess;    

        while(animal.compare(std::toupper(guess)) != 0 && count < limit)
        {
                std::cout << "Can you guess what animal I am thinking of?: \n";
                std::cin >> guess;
                count++;
                if(animal.compare(std::toupper(guess)) != 0)
                {
                    std::cout << "\nHmm, nope. That's not the animal I'm thinking of.\n";
                    if(count > 2)
                    {
                        std::cout << "I'll give you a hint. It lives in water.\n";
                    }
                }
            }
        }//End nested while loop

        if(count >= limit)
        {
            std::cout << "\nI'm sorry, but you are out of guesses.\n";
        }
        else
        {
            std::cout << "\n*** Good job! You guessed the correct animal! ***\n";
            std::cout << "\t\t><)))º> ❤ <º)))><\t\t\n";
        }

        char choose = 'Y' ;
        std::cout << "Would you like to try again?(y/n): ";
        std::cin >> choose;
        if(std::toupper(choose) == 'N') break;

    } while(true);

    return 0;
}