随机数Gen作为函数

时间:2014-09-06 03:50:50

标签: c++ function random

这个程序的目标是有一个随机数生成器,我可以通过一个函数在main中使用它。然后来自随机数生成器的值将触发一个动作。这有if语句检查生成器的值。我遇到的问题是两个字符串,“数字1 - 5”和“数字6 - 10”出现而不是if语句只触发它们所期望的,这只会使一个字符串出现。

#include <iostream>
#include <string>
#include <chrono>

void main()
{
    void RanNum1to10();
    int RanNum;
    int x;
    std::cin >> x;
    if (x == 2)
    {
        std::cout << "X = 2" << std::endl << std::endl;
        RanNum1to10();
        if (RanNum = 1||2||3||4||5)
        {
            std::cout << "Number 1 - 5" << std::endl;
        }
        if (RanNum = 6||7||8||9||10)
        {
            std::cout << "Number 6 - 10" << std::endl;
        }
    }
system("pause");
}

void RanNum1to10()
{
    (time(0));
    int RanNum;
    int x = 1+(rand() % 9 + 1);
    switch(x)
    {
        case 1:
            RanNum = 1;
        case 2:
            RanNum = 2;
        case 3:
            RanNum = 3;
        case 4:
            RanNum = 4;
        case 5:
            RanNum = 5;
        case 6:
            RanNum = 6;
        case 7:
            RanNum = 7;
        case 8:
            RanNum = 8;
        case 9:
            RanNum = 9;
        default:
            RanNum = 10;
    }
}

谢谢。

2 个答案:

答案 0 :(得分:2)

您需要使用

    if ( (RanNum == 1) ||
         (RanNum == 2) ||
         (RanNum == 3) ||
         (RanNum == 4) ||
         (RanNum == 5) )

而不是

    if (RanNum = 1||2||3||4||5)

与其他if语句类似。

这是一个问题。

另一个问题是你有这条线:

int RanNum;
<{1>}中的

,但您尚未为其指定任何值。

您已在main中为同名的本地变量指定了值,但不会更改RanNum1to10RanNum的值。

您可以通过将main的返回值更改为RanNum1to10,并从中返回随机数,并将int的返回值分配给{{1}来解决该问题}。

更改行

RanNum1to10

RanNum

更改行

void RanNum1to10();

int RanNum1to10();

RanNum1to10(); 的实施更改为:

    RanNum = RanNum1to10();

更新,以回应OP的评论

由于运算符优先级,表达式RanNum1to10相当于int RanNum1to10() { return (rand() % 10 + 1); } ,相当于if (x = 2||3||4)。如您所见,这种if ( x = (2 || 3 || 4) )语句的条件总是计算为真。

答案 1 :(得分:0)

第一个问题:if (x = 2)应为if (x == 2)。否则,您只是测试分配的结果,该分配等于分配的数量。编译器应该为此生成警告。

第二个问题:要针对多个值进行测试,您不能只将or值与||一起使用。这种表达式的结果将是真或假,等于1或0.您需要扩展每个比较:

if (RanNum == 1 || RanNum == 2 || RanNum == 3 || RanNum == 4 || RanNum == 5)

当然,在这种特殊情况下,您可以简化条件:

if (RanNum >= 1 && RanNum <= 5)