为什么我的srand会返回所有结果?

时间:2016-09-01 00:21:01

标签: c++ random srand

这是一个简单的文字游戏的开始。在游戏中,你应该四处寻找地下城并收集文物。我使用srand(time(0))做一些事情,比如找到要进入的阶段,攻击以及找到的项目,我在编程中已经走得太远,但我已经遇到了问题。我的rand()返回所有结果。当我运行游戏时(这不是完整的代码,顺便说一句),它会返回“你进入了一个地牢!”,“哦,不,敌人已经到了!”,并且“你找到了一件神器!”

void mainScreen()
{
    srand(time(0));
    cout << "Health: \n";
    cout << health;
    cout << endl;
    _sleep(500);
    cout << "Inventory: \n";
    cout << inventory;
    cout << endl;
    _sleep(500);
    cout << "Gold: \n";
    cout << gold;
    cout << endl;
    _sleep(500);
    cout << "Artifacts: \n";
    cout << artifacts;
    cout << endl;
    _sleep(500);
    cout << "Rolling the dice of fate... \n";
    int diceRoll = 1 + (rand() % 10);
    if (diceRoll = 1, 2, 3, 4, 5, 6) {
        cout << "You entered a dungeon! \n";
    }
    if (diceRoll = 7, 8) {
        cout << "Oh No! An enemy has arrived! \n";
    }
    if (diceRoll = 9, 10) {
        cout << "You found an artifact! \n";
    }
}

2 个答案:

答案 0 :(得分:5)

您的if陈述不符合您的预期。

首先,当您应该使用=比较运算符时,您正在使用==赋值运算符。

其次,您正在使用,运算符,该运算符计算左右表达式,然后返回正确表达式的结果。

所以,这段代码:

if (diceRoll = 1, 2, 3, 4, 5, 6)
{
    ...
}
if (diceRoll = 7, 8)
{
    ...
}
if (diceRoll = 9, 10)
{
    ...
}

实际上是这样做的,这不是你想要的:

diceRoll = 1;
if (6)
{
    ...
}
diceRoll = 7;
if (8)
{
    ...
}
diceRoll = 9;
if (10)
{
    ...
}

你需要这样做:

if ((diceRoll == 1) ||
    (diceRoll == 2) ||
    (diceRoll == 3) ||
    (diceRoll == 4) ||
    (diceRoll == 5) ||
    (diceRoll == 6))
{
    cout << "You entered a dungeon! \n";
}
else if ((diceRoll == 7) ||
        (diceRoll == 8))
{
    cout << "Oh No! An enemy has arrived! \n";
}
else
{
    cout << "You found an artifact! \n";
}

使用范围比较可以简化:

if ((diceRoll >= 1) && (diceRoll <= 6))
{
    cout << "You entered a dungeon! \n";
}
else if ((diceRoll >= 7) && (diceRoll <= 8))
{
    cout << "Oh No! An enemy has arrived! \n";
}
else
{
    cout << "You found an artifact! \n";
}

或替换为单个switch声明:

switch (diceRoll)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    {
        cout << "You entered a dungeon! \n";
        break;
    }

    case 7:
    case 8:
    {
        cout << "Oh No! An enemy has arrived! \n";
        break;
    }

    case 9:
    case 10:
    {
        cout << "You found an artifact! \n";
        break;
    }
}

另外,在旁注中,每次调用srand()时都不应该调用mainScreen()(我假设在程序的生命周期内可以多次调用它)。 srand()应该只调用一次,因此您应该在调用main()之前在mainScreen()中调用它。

答案 1 :(得分:0)

此:

if (diceRoll = 1, 2, 3, 4, 5, 6) {
    cout << "You entered a dungeon! \n";
}
if (diceRoll = 7, 8) {
    cout << "Oh No! An enemy has arrived! \n";
}
if (diceRoll = 9, 10) {
    cout << "You found an artifact! \n";
}

完全错误,你需要单独检查每个元素,如下所示:

if (diceRoll == 1 || diceRoll ==2 || diceRoll == 3 || diceRoll == 4 diceRoll == 5 || diceRoll == 6) {
    cout << "You entered a dungeon! \n";
}
if (diceRoll == 7|| diceRoll == 8) {
    cout << "Oh No! An enemy has arrived! \n";
}
if (diceRoll == 9 ||diceRoll == 10) {
    cout << "You found an artifact! \n";
}

为了进一步简化第一个分支,您可以这样做:

if (diceRoll >= 1 || diceRoll <= 6) {
    cout << "You entered a dungeon! \n";
}