我正在开发一个程序,该程序使用一个函数生成2个随机整数,我稍后会用它来要求用户添加和计算总和。目前,我遇到了一个重复相同数字的问题。
这是迄今为止的计划:
#include<iostream>
#include<ctime>
using namespace std;
/*
This function generates a random integer
between 0 and max_int
*/
int get_rand_int(int max_int){
srand(time(0));
return int(rand()) % max_int;
}
This program generates random addition problems
with integers between 0 and 100
int main(){
int num1 = get_rand_int(101);
int num2 = get_rand_int(101);
cout << num1 << endl;
cout << num2 << endl;
请注意这是我老师指定的作业问题。他为我们提供了骨架,我们正试图填补空白。我有一种感觉问题出在我职能部分的范围内,但那是我老师工作的一部分,所以我不确定是否需要触摸它。提前谢谢。
答案 0 :(得分:4)
是。 srand
使用time
的结果初始化随机序列。但是,time
每秒只更改一次!这意味着如果您在一秒钟的延迟中调用两次函数,则会得到相同的数字。
一种解决方案是在程序开头只调用srand
一次(例如在main
函数中)。
答案 1 :(得分:2)
您必须在程序中仅对随机生成器播种一次
srand(time(0)); // this must happen only once, at the beginning of main()
您现在将其置于函数get_rand_int
内,并在很短的时间内调用该函数两次。种子最终是相同的,所以你得到相同的数字序列。
答案 2 :(得分:1)
调用main中的srand(time(0))仅设置当前时间一次以立即使用随机生成。
int main(){
srand(time(0));
int num1 = get_rand_int(101);
int num2 = get_rand_int(101);
cout << num1 << endl;
cout << num2 << endl;
}