需要生成指定范围内的随机整数

时间:2015-05-10 22:08:25

标签: c++ random integer

我需要在用户定义的范围内生成一个随机整数。它需要使用单个变量来存储函数调用的结果,并且只需在每次调用时更新变量。

使用输入生成随机数的函数:

int genRandInt (int smallnum, int bignum) {
    int randnum = smallnum + (rand() % (bignum - smallnum + 1));

    return randnum;
}

主要功能:

int main()
{
    srand(time(NULL));
    int smallnum;
    int bignum;
    int z = genRandInt(smallnum, bignum);

    cout << "Enter the smallest possible number: ";
    cin >> smallnum;

    cout << "Enter the biggest possible number: ";
    cin >> bignum;

    genRandInt(smallnum, bignum);
    cout << "Random number: " << z << endl;

    genRandInt(smallnum, bignum);
    cout << "Random number: " << z << endl;

    genRandInt(smallnum, bignum);
    cout << "Random number: " << z << endl;

    return 0;
}

程序运行但它会继续返回三个相同的数字,其中没有一个在用户定义的范围内。例如,为每个函数调用执行10和100的范围返回267499385。

任何想法在这里出了什么问题?我生气了。

编辑:用int z = genRandInt(smallnum, bignum);替换int z;的初始定义。然后我用z = genRandInt(smallnum, bignum);替换了三个函数调用,现在看起来工作正常。那是对的吗?或者有更好的方法吗?

EDIT2:看来这是一个很好的方法。谢谢大家。

3 个答案:

答案 0 :(得分:3)

它没有改变的原因是你有这个:

genRandInt(smallnum, bignum);
三次。在每种情况下都将其更改为:

z = genRandInt(smallnum, bignum);

这会将结果存储在您的变量中。

您的结果超出范围的原因是,当您第一次调用smallnum时,bignumgenRandInt都未定义。由于您已将 结果分配给z并且从未更改过,因此这是您的问题。

答案 1 :(得分:0)

在没有先初始化zsmallnum的情况下为bignum分配值:

int smallnum;
int bignum;
int z = genRandInt(smallnum, bignum);

然后,您对[{1}}的进一步调用实际上并未将结果分配给genRandInt(),因此您的代码会打印第一次调用时的原始垃圾值。

答案 2 :(得分:0)

您不更新z。它只是设置为函数的返回值。