【问题标题】:Re run a c++ program based on user input or condition根据用户输入或条件重新运行 c++ 程序
【发布时间】: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 的循环,但我不知道如何实现它以重新运行程序。
  • 为什么需要重新运行程序,而不是重新运行程序的逻辑?

标签: c++ arrays loops


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多