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

Need to generate a random integer within a specified range

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

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

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;
}

程序运行但一直返回三个相同的数字,其中none个在用户定义的范围内。例如,为每个函数调用做 10 和 100 returns 267499385 的范围。

知道这里出了什么问题吗?我很生疏。

编辑:将 int z = genRandInt(smallnum, bignum); 的初始定义替换为 int z;。然后我用 z = genRandInt(smallnum, bignum); 替换了三个函数调用,现在它似乎工作正常。这样合适吗?或者有更好的方法吗?

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

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

genRandInt(smallnum, bignum);

三次。在每种情况下将其更改为:

z = genRandInt(smallnum, bignum);

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

您的结果超出范围的原因是您第一次调用 genRandInt 时既没有定义 smallnum 也没有定义 bignum。由于您将 that 结果分配给 z 并且从未更改它,那么这就是您的问题。

您在没有先初始化 smallnumbignum 的情况下为 z 赋值:

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

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

你没有更新 z。它仅设置一次为函数的 return 值。