所以我用2D阵列制作了一个5x5的函数。内部值在五个不同的值之间被放置并放置在数组中。 然后我在main();中调用此函数。但问题是,当我调用数组的函数时,结果总是相同的。因此,每次运行该函数时,似乎没有重置数组或获取新的随机值。
怎么能解决这个问题?我希望每次运行函数时数组都能获取新值,这样每次我调用main()函数时都会这样;数组中会有新值,
我的完整代码:
#include <iostream>
#include <ctime>
using namespace std;
char array2D[5][5];
int roll(){
srand (time(0));
for (int x=0; x<5; x++){
for (int y=0; y<5; y++){
array2D[x][y] = "ABCDE"[rand() % 5];
}
}
for (int x=0; x<5; x++){
for (int y=0; y<5; y++){
cout << array2D[x][y];
}
cout << endl;
}
cout << endl;
return 0;
}
int main()
{
roll();
roll();
roll();
return 0;
}
感谢。
答案 0 :(得分:1)
您不应多次拨打srand
(除非您实际上想要重复一些随机数)。在你的情况下,我怀疑在同一秒内运行所有roll
函数的可能性非常高,所以它们都会给出相同的随机数。
答案 1 :(得分:0)
如果您在一秒钟内多次调用该函数,那么结果肯定与您将随机数种子设置为相同值的结果相同。
您应该只设置种子一次,最好尽早在main
函数中设置。
答案 2 :(得分:0)
我认为这是因为系统计时器的粒度(time(0)
)。我记得,time(0)
每秒都有新价值。但是你的函数的所有三次运行都适合一秒钟,因此计时器没有时间接收新值。
如果您希望每次运行功能时都有新的随机值,只需将stand(time(0))
移至main
功能的开头
答案 3 :(得分:0)
将srand (time(0));
移至主要功能。
time(0)
是一个秒数,因此除非调用超过第二个边界,否则它将重置为相同的值。