笔者之前主要开发语言为C#,随机数实现较为容易,一个Random函数即可。在C++猜数字游戏中,由于C++没有写好的Random函数,想要实现随机数则需要使用rand()以及srand()函数。
1、一开始时只加了rand(),但是测试几次发现,从零到一百随机的结果一直为42,不禁陷入了沉思,遂查阅资料得出rand() 的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的,产生的是伪随机数字,每次执行时是相同的; 若想要实现真随机,需要用函数 srand() 初始化它。
rand()使用方法为int rand(void)
要取得 [a,b) 的随机整数,使用 (rand() % (b-a))+ a;
要取得 [a,b] 的随机整数,使用 (rand() % (b-a+1))+ a;
要取得 (a,b] 的随机整数,使用 (rand() % (b-a))+ a + 1;
通用公式: a + rand() % n;其中的 a 是起始值,n 是整数的范围。
要取得 a 到 b 之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得 0~1 之间的浮点数,可以使用 rand() / double(RAND_MAX)。
2、srand()为初始化随机数发生器,其用来设置产生随机数时的随机数种子,随机数种子seed若每次设置为相同时,则随机数也相同,由于每次程序运行的时间不同,所以可以引入time来实现不同的种子。rand()会根据srand()的种子值返回一个随机数。
srand()使用方法为void srand(unsigned int seed)
3、明白随机数产生之后,即可完成猜数字的游戏。
#include<iostream>
#include <cstdlib>//rand
#include <ctime>//time
using namespace std;
int main() {
srand((int)time(0));
int num = rand() % 100 + 1;
int guess = 0;
cout << "请输入你猜的数字(范围为0-100)-->" << endl;
cin >> guess;
while (num != guess) {
if (guess < num) {
cout << "您猜的数字过小,请输入你猜的数字(范围为0-100)-->" << endl;
cin >> guess;
}
else if (guess > num) {
cout << "您猜的数字过大,请输入你猜的数字(范围为0-100)-->" << endl;
cin >> guess;
}
}
cout << "恭喜猜对" << endl;
return 0;
}
rand()几种随机范围参考:https://www.runoob.com/w3cnote/cpp-rand-srand.html