根据用户输入或条件重新运行 c++ 程序

Posted

技术标签:

【中文标题】根据用户输入或条件重新运行 c++ 程序【英文标题】:Re run a c++ program based on user input or condition 【发布时间】:2019-04-12 13:06:17 【问题描述】:

我正在学习 c++,并且作为数组和用户输入的练习,我正在尝试编写一个简单的扑克应用程序。 由于我在这门课程的开始,我对 c++ 语言的所有了解是代码的执行需要main() 函数。我已经编写了一些代码行作为最终应用程序的基础,它现在可以正常工作。我想实现一个循环以根据用户输入重新运行应用程序,条件是应用程序的范围将是每次执行后鱼变量数量的数量。我怎样才能做到这一点?另一个问题是关于使用数组中的随机元素。有什么好的参考资料可以让我学习如何做到这一点?

这是我的代码:

#include <iostream>
using namespace std;

int main()
    string name;
    int bet;

    int fish = 100;
    char seed[4][10] = "hearts","clubs","diamonds","spades";
    int cards[9] = 2,3,4,5,6,7,8,9,10;

    std::cout << "Welcome in PokerBash! Please enter your name:" <<std::endl;
    std::cin >> name;

    std::cout << "Your name is " << name <<std::endl;

    std::cout << "You have a credit of:" << fish <<std::endl;
    std::cout << "Please enter your bet:" <<std::endl;
    std::cin >> bet;

    std::cout << "Your cards are " << seed[2] << " " << cards[3] << " " << seed[1] << " " << cards[7] <<std::endl;

    std::cout << "Your credits after this bet:" << fish - bet <<std::endl;

    return 0;

【问题讨论】:

"我想实现一个循环" 是什么阻止了你这样做?如果您不了解 C++ 中循环的语法,请考虑向good C++ book 学习。 我知道forwhile 的循环,但我不知道如何实现它以重新运行程序。 为什么需要重新运行程序,而不是重新运行程序的逻辑? 【参考方案1】:

如果用户想要或fish 小于0,您可以通过创建一个依赖于最初为true 的布尔值playingwhile 循环来执行一个循环。因此,如果两个事件之一发生,请将 playing 设置为 false 并且循环停止:

int main() 
    //variables

    bool playing = true;
    while (playing) 
        int fish = 100;

        //poker game

        if (fish < 0)  //no money
            playing = false;
        
        else 
            char input;
            std::cout << "would you like to play again? (y/n): ";

            std::cin >> input;
            if (input != 'y') 
                playing = false;
            
        
    

如您所见,这会重复,直到我输入不是 'y' 的内容:

would you like to play again? (y/n): y
would you like to play again? (y/n): y
would you like to play again? (y/n): n

要从数组中选择一个随机元素,您可以使用&lt;random&gt; 中的实用程序,例如他们的std::mersenne_twister_engine。要从数组中获取随机元素,您基本上只需要创建一个随机数并将其用作数组索引:

#include <iostream>
#include <random>

int main() 
    std::random_device rd;
    std::mt19937_64 engine(rd());
    std::uniform_int_distribution<int> distribution(0, 8);


    int cards[9] =  2,3,4,5,6,7,8,9,10 ;
    while (true) 
        std::cout << cards[distribution(engine)] << '\n';
    

这里有一些重要的事情:

std::random_device rd;
std::mt19937_64 engine(rd());

只执行一次(从不循环)。它用于初始化您的伪随机生成器engine

std::uniform_int_distribution&lt;int&gt; distribution(0, 8);

添加一个分布。请注意,因为您的int cards[9] 具有9 元素,所以范围必须从08,因为数组从0 开始并以它们的大小结束 - 1,您可能已经知道了。 :)

运行这个你可以看到它随机打印出从210的卡号:

2
10
7
9
2
4
9
10
8
9
8
6
8
2
10

这些是您进一步实施的帮助点。我添加了一些我注意到的关于您的代码的内容,但对于问题本身来说并不是必需的。


你应该注意你不应该use namespace std - 你可以阅读here 为什么。


还有,而不是:

char seed[4][10] =  "hearts","clubs","diamonds","spades" ;

使用:

std::string seed[4] =  "hearts","clubs","diamonds","spades" ;

要使用std::string,请包含&lt;string&gt; 标头。


你写了std::cin &gt;&gt; name;,但这不适用于带有空格的字符串,比如看这里:

Welcome in PokerBash! Please enter your name:
Stack Danny
Your name is Stack

要获取全名,请使用

std::getline(std::cin, name);

【讨论】:

感谢您的建议。我正在尝试使用do() while();,这是一个很好的起点,我将尝试使用您的代码为我的简单应用程序实现更强大的解决方案。由于我需要显示扑克游戏的牌,是否还有一种简单的方法来检查用户牌以输出获胜消息?我想使用 if() else 控制结构来做到这一点,但也许它会不会太复杂? 如果您必须检查某些内容,无论如何您都必须使用if() 语句。但是如果连续 20 个 if 语句,你可能做错了什么。请随时在此处发布您的代码(带有 pastebin 链接),让我看看这种方法。 目前这部分代码我没有写,我需要先做一张扑克单人获胜牌的列表。正如您所理解的那样,我已经问过这个问题,因为我想避免更大的if() 结构,我认为有更好的方法来完成这项任务。对于每一个建议,请随时在聊天中与我联系【参考方案2】:

试试这个,

#include <iostream>
using namespace std;

int main()

    string name;
    int bet;
    int fish = 100;

    char seed[4][10] = "hearts", "clubs", "diamonds", "spades";
    int cards[9] = 2, 3, 4, 5, 6, 7, 8, 9, 10;

    while (1)
    

        std::cout << "Welcome in PokerBash! Please enter your name ( Enter q to quit ):" << std::endl;
        std::cin >> name;

        if(name == "q")
            exit(0);

        std::cout << "Your name is " << name << std::endl;

        std::cout << "You have a credit of:" << fish << std::endl;
        std::cout << "Please enter your bet:" << std::endl;
        std::cin >> bet;

        std::cout << "Your cards are " << seed[2] << " " << cards[3] << " " << seed[1] << " " << cards[7] << std::endl;

        std::cout << "Your credits after this bet:" << fish - bet << std::endl;    
    

    return 0;

【讨论】:

以上是关于根据用户输入或条件重新运行 c++ 程序的主要内容,如果未能解决你的问题,请参考以下文章

应用程序重新启动 C++ Visual Studio 时保存编辑控件用户输入和恢复的有效方法

C++编写一个程序,将用户输入的十进制整数转换成任意进制的数

Angular 2 根据用户输入重新加载当前组件

根据用户输入的值输入字段重新渲染 NgRepeat

如何在 C++ 中检查用户输入

javascript 每当用户输入类型更改(鼠标或触摸)时运行回调。用于根据输入设备启用/禁用代码。钍