根据用户输入或条件重新运行 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 学习。 我知道for
或while
的循环,但我不知道如何实现它以重新运行程序。
为什么需要重新运行程序,而不是重新运行程序的逻辑?
【参考方案1】:
如果用户想要或fish
小于0
,您可以通过创建一个依赖于最初为true
的布尔值playing
的while
循环来执行一个循环。因此,如果两个事件之一发生,请将 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
要从数组中选择一个随机元素,您可以使用<random>
中的实用程序,例如他们的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<int> distribution(0, 8);
添加一个分布。请注意,因为您的int cards[9]
具有9
元素,所以范围必须从0
到8
,因为数组从0
开始并以它们的大小结束 - 1,您可能已经知道了。 :)
运行这个你可以看到它随机打印出从2
到10
的卡号:
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
,请包含<string>
标头。
你写了std::cin >> 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 时保存编辑控件用户输入和恢复的有效方法