C++抛硬币模拟器不起作用
C++ coin toss simulator not working
我应该用 c++ 创建一个抛硬币模拟。我有这个代码;但是,我对所有 20 次投掷都获得相同的输出,这意味着我要么在所有 20 次投掷中得到正面,要么在所有 20 次投掷中得到反面。我从来没有得到任何我应该得到的变化。我觉得除了那一部分之外,我做的一切都是正确的。谁能指出我正确的方向?
法典:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
class Coin
{
public:
Coin()
{
toss();
}
void toss()
{
unsigned seed = time(0);
srand(seed);
int num = (rand()%(2));
if (num == 0)
{
sideUp = ("Heads");
}
else
{
sideUp = ("Tails");
}
}
string getSideUp()
{
return sideUp;
}
private:
string sideUp;
};
int main()
{
int totHeads = 0, totTails = 0;
Coin flip;
cout<<"Flip #1: "<<flip.getSideUp()<<endl;
if (flip.getSideUp() == ("Heads"))
{
totHeads += 1;
}
else
{
totTails += 1;
}
for (int x = 2; x <= 20; x++)
{
flip.toss();
cout<<"Flip #"<<x<<": "<<flip.getSideUp()<<endl;
if (flip.getSideUp() == ("Heads"))
{
totHeads += 1;
}
else
{
totTails += 1;
}
}
cout<<"The total amount of heads were: "<<totHeads<<endl;
cout<<"The total amount of tails were: "<<totTails<<endl;
return 0;
}
您的toss
函数会不断重新设定 PRNG 种子。不要。
在程序开始时呼叫srand
一次。
- srand() — 为什么只调用一次?
你每次投掷都会播种随机数生成器,这不是要走的路。大多数情况下,每个程序只应播种一次 PRNG。在您的情况下,您会得到相同的种子,因为您在很短的时间内多次播种,因此每次投掷后您都会得到相同的结果,因为 PRNG 开始重复使用相同的种子。只需删除线条
unsigned seed = time(0);
srand(seed);
从您的toss
函数中将它们作为main
的第一行。事实上,你可以完全摆脱seed
变量,只写
srand(time(0));
int main(){
后
如果您有权访问 C++11,则应使用 <random>
中的新功能和 PRNG,而不是旧的C
式rand()/srand()
组合。例如,请参阅 http://en.cppreference.com/w/cpp/numeric/random 以获取一些介绍。
问题是你在toss()
函数开始时播种随机生成器。程序运行得如此之快,以至于每次调用time(0)
都相同,因此随机数生成器在每次调用时都会重置为相同的起点。因此,您每次都会得到相同的随机数。在开始重复调用 toss()
函数之前,只应调用srand()
一次。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- C++抛硬币模拟器不起作用