需要生成一个指定范围内的随机整数
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
并且从未更改它,那么这就是您的问题。
您在没有先初始化 smallnum
和 bignum
的情况下为 z
赋值:
int smallnum;
int bignum;
int z = genRandInt(smallnum, bignum);
然后,您对 genRandInt()
的进一步调用实际上并未将结果分配给 z
,因此您的代码打印了第一次调用的原始垃圾值。
你没有更新 z。它仅设置一次为函数的 return 值。
我需要在用户定义的范围内生成一个随机整数。它需要使用单个变量来存储函数调用的结果,并在每次调用时简单地更新变量。
使用输入生成随机数的函数:
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
并且从未更改它,那么这就是您的问题。
您在没有先初始化 smallnum
和 bignum
的情况下为 z
赋值:
int smallnum;
int bignum;
int z = genRandInt(smallnum, bignum);
然后,您对 genRandInt()
的进一步调用实际上并未将结果分配给 z
,因此您的代码打印了第一次调用的原始垃圾值。
你没有更新 z。它仅设置一次为函数的 return 值。