C++ 抛硬币模拟器不工作

标签 c++ c

我应该用 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一次

关于C++ 抛硬币模拟器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27218980/

相关文章:

c++ - 返回对局部变量的引用

c++ - linux C++ 应用程序部署

c++ - CLion 的“运行”按钮变灰或无法正常工作

c# - 对于此 C 代码,哪种编码方式是正确的?

c - 为什么 atan 没有产生正确的结果?

c++ - 宏输出说明

C++访问冲突崩溃

c++ - C++ 中一个类的多个接口(interface)

c - 找到编号。结构数组中的元素?

c - 此示例是否包含数据竞争?