如果用户键入“是”,则重新开始猜测数字游戏 我是C++新手。我创建了一个程序,生成一个随机数,用户尝试猜测它。它会通知您是否输入了更高或更小的数字,直到您猜出正确的数字。在猜到正确的数字后,它会问你是否想再玩一次。如果键入YES,程序应重新启动,但如果键入NO,程序应打印再见并关闭

如果用户键入“是”,则重新开始猜测数字游戏 我是C++新手。我创建了一个程序,生成一个随机数,用户尝试猜测它。它会通知您是否输入了更高或更小的数字,直到您猜出正确的数字。在猜到正确的数字后,它会问你是否想再玩一次。如果键入YES,程序应重新启动,但如果键入NO,程序应打印再见并关闭,c++,C++,我的节目: int main() { int num, guess, tries = 0; srand(time(0)); //seed random number generator num = rand() % 100 + 1; // random number between 1 and 100 cout << "Guess My Number Game\n\n"; do { cout << "Ente

我的节目:

int main() {
    int num, guess, tries = 0;
    srand(time(0)); //seed random number generator
    num = rand() % 100 + 1; // random number between 1 and 100
    cout << "Guess My Number Game\n\n";
    do
    {
        cout << "Enter a guess between 1 and 100 : ";
        cin >> guess;
        tries++;
        if (guess > num)
            cout << "Too high!\n\n";
        else if (guess < num)
            cout << "Too low!\n\n";
        else
            cout << "\nCorrect! You got it in " << tries << " guesses!\n";
    } while (guess != num);

    cin.ignore();
    cin.get();
    return 0;
}
intmain(){
int num,猜测,尝试=0;
srand(time(0));//种子随机数生成器
num=rand()%100+1;//1到100之间的随机数
猜不到;
尝试++;
如果(猜测>数值)
无法添加一个在用户输入不是“否”时运行的变量。不要忘记将srand放在循环之前,并重新初始化您可能拥有的任何其他变量。

添加一个在用户输入不是“否”时运行的变量。不要忘了将srand放在循环之前,并重新初始化您可能拥有的任何其他变量。

您可以执行以下操作:

while (1) {
    num = rand() % 100 + 1;
    do {
        ...
    } while (guess != num);
    cout << "Restart?" << endl;
    // Get answer and break if it is NO
}
while(1){
num=rand()%100+1;
做{
...
}while(猜测!=num);
你可以这样做:

while (1) {
    num = rand() % 100 + 1;
    do {
        ...
    } while (guess != num);
    cout << "Restart?" << endl;
    // Get answer and break if it is NO
}
while(1){
num=rand()%100+1;
做{
...
}while(猜测!=num);

cout与使用
rand()
和或
srand()
相比,我更喜欢使用标准库中的伪随机数生成器,这些生成器可以在
头文件中找到。您可以查看我的小应用程序,看看随机生成器发生了什么

#include <iostream>
#include <string>
#include <random>

int main() {
    static std::random_device rd;
    static std::mt19937 gen;
    gen.seed( rd() );
    static std::uniform_int_distribution<> dist( 1, 100 );

    int hiddenNumber = dist( gen ); 
    int guess = 0;
    int attempts = 0;
    std::string userResponse;

    do {            
        if ( attempts == 0 ) {
            std::cout << "Enter a number between 1 and 100: ";
        }
        std::cin >> guess;
        ++attempts;

        if ( guess < hiddenNumber ) {           
            std::cout << "\nYour guess was to low: Please try again!\n";
        } else if ( guess > hiddenNumber ) {
            std::cout << "\nYour guess was to high: Please try again!\n";
        } else {
            std::cout << "\nYou guessed it in " << attempts << " tries!\n";
            std::cout << "\nWould you like to try again yes/no?\n\n";

            userResponse.clear(); // clear out string first.
            std::cin >> userResponse;

            if ( userResponse == "yes" || userResponse == "Yes" ) {
                attempts = 0;
                hiddenNumber = dist( gen );
                continue;
            } else if ( userResponse == "no" || userResponse == "No" ) {
                std::cout << "Goodbye!" << std::endl;
                break;
            }
        }
    } while ( guess != hiddenNumber );

    std::cout << "/nPress any key to quit.";
    std::cin.get();
    return 0;
} 
<> P> >在不期望的弃权或即将被弃用的代码> > RAND()/<代码>和<代码> SRAND()/<代码>函数中使用现代C++伪随机数生成器是很简单的。 至于将变量声明为静态变量,出于性能原因,我选择将这些变量设置为静态变量,而不是将它们作为本地堆栈变量

有关标准库随机生成器和发行版的更多信息,请访问

至于代码的其余部分,它应该是不言自明的



EDIT-我对do-while循环做了一些更改。我返回并通过调试器运行了它,但它并没有像我预期的那样工作。据我所知,它现在工作正常。所有变量都在正确的位置重置,我甚至添加了额外的位来说“再见!”

而不是使用
rand()
和/或
srand()
我更喜欢使用标准库中的伪随机数生成器,这些生成器可以在
头文件中找到。您可以查看我的小应用程序,看看随机生成器发生了什么

#include <iostream>
#include <string>
#include <random>

int main() {
    static std::random_device rd;
    static std::mt19937 gen;
    gen.seed( rd() );
    static std::uniform_int_distribution<> dist( 1, 100 );

    int hiddenNumber = dist( gen ); 
    int guess = 0;
    int attempts = 0;
    std::string userResponse;

    do {            
        if ( attempts == 0 ) {
            std::cout << "Enter a number between 1 and 100: ";
        }
        std::cin >> guess;
        ++attempts;

        if ( guess < hiddenNumber ) {           
            std::cout << "\nYour guess was to low: Please try again!\n";
        } else if ( guess > hiddenNumber ) {
            std::cout << "\nYour guess was to high: Please try again!\n";
        } else {
            std::cout << "\nYou guessed it in " << attempts << " tries!\n";
            std::cout << "\nWould you like to try again yes/no?\n\n";

            userResponse.clear(); // clear out string first.
            std::cin >> userResponse;

            if ( userResponse == "yes" || userResponse == "Yes" ) {
                attempts = 0;
                hiddenNumber = dist( gen );
                continue;
            } else if ( userResponse == "no" || userResponse == "No" ) {
                std::cout << "Goodbye!" << std::endl;
                break;
            }
        }
    } while ( guess != hiddenNumber );

    std::cout << "/nPress any key to quit.";
    std::cin.get();
    return 0;
} 
<> P> >在不期望的弃权或即将被弃用的代码> > RAND()/<代码>和<代码> SRAND()/<代码>函数中使用现代C++伪随机数生成器是很简单的。 至于将变量声明为静态变量,出于性能原因,我选择将这些变量设置为静态变量,而不是将它们作为本地堆栈变量

有关标准库随机生成器和发行版的更多信息,请访问

至于代码的其余部分,它应该是不言自明的



编辑-我对do while循环做了一些更改。我返回并通过调试器运行了它,但它没有像我预期的那样工作。据我所知,它现在工作正常。所有变量都在正确的位置重置,我甚至添加了额外的位来说“再见!”.

这就是a的作用。在这种情况下,a
break
是不必要的,因为您在循环结束时检查了条件。@FrançoisAndrieux break在这里用于外部
while(1)
循环,用于建模问题,就像“运行它直到用户要求它中断”当然,它可以用
while do
语句来实现,但这只是一个偏好问题。这就是a的用途。在这种情况下,a
break
是不必要的,因为您可以在循环结束时检查条件。@FrançoisAndrieux break此处用于外部
while(1)
循环,用于建模问题,就像“运行它直到用户要求它中断”。当然,它可以通过
while do
语句来实现,但这只是一个偏好问题。您的答案是信息性的,但是,它与问题中的问题无关。@aaamourao在阅读了OP发布的问题之后,我没有看到任何可行的问题……因此我决定给OP一些有用的信息关于使用比
rand()或
srand()更好的随机数机制的未来参考提示
@aaamourao捕捉得很好;它必须重新设置是的;我不太喜欢do-while循环;它们有点绊倒我。我做了一些必要的编辑,因为程序中有一些错误。你的答案是信息性的,但是,它与问题中的问题无关。@aaamourao在阅读了OP中发布的问题之后;我没有看到任何可行的问题……因此我决定给OP一些有用的提示,供将来参考,使用比
rand()或
srand()更好的随机数机制
@aaamourao捕捉得很好;它必须重新设置是的;我不太喜欢do while循环;它们有点绊倒我。我做了一些必要的编辑,因为程序中有一些bug。