我需要在用户定义的范围内生成一个随机整数。它需要使用单个变量来存储函数调用的结果,并且只需在每次调用时更新变量。
使用输入生成随机数的函数:
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:看来这是一个很好的方法。谢谢大家。
答案 0 :(得分:3)
它没有改变的原因是你有这个:
genRandInt(smallnum, bignum);
三次。在每种情况下都将其更改为:
z = genRandInt(smallnum, bignum);
这会将结果存储在您的变量中。
您的结果超出范围的原因是,当您第一次调用smallnum
时,bignum
和genRandInt
都未定义。由于您已将 结果分配给z
并且从未更改过,因此这是您的问题。
答案 1 :(得分:0)
在没有先初始化z
和smallnum
的情况下为bignum
分配值:
int smallnum;
int bignum;
int z = genRandInt(smallnum, bignum);
然后,您对[{1}}的进一步调用实际上并未将结果分配给genRandInt()
,因此您的代码会打印第一次调用时的原始垃圾值。
答案 2 :(得分:0)
您不更新z。它只是设置为函数的返回值。