1

所以我用一个 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;
}

谢谢。

4

4 回答 4

1

你不应该srand多次调用(除非你真的想重复一些随机数)。在您的情况下,我怀疑在roll同一秒内运行所有功能的机会非常高,因此它们都会给出相同的随机数。

于 2013-08-12T12:00:07.930 回答
0

如果您在一秒钟内多次调用该函数,那么是的,结果肯定会与您将随机数种子设置为相同的值相同。

您应该只设置一次种子,最好在main函数中尽早设置。

于 2013-08-12T12:00:47.913 回答
0

我认为这是因为系统计时器(time(0))的粒度。我记得,time(0)每一秒都有新的价值。但是您的函数的所有三个运行都在一秒钟内完成,因此计时器没有时间接收新值。

如果您想在每次函数运行时都有新的随机值,只需将您移动到函数stand(time(0))的开头main

于 2013-08-12T12:01:22.547 回答
0

转到srand (time(0));主要功能。

time(0)是秒数,因此除非调用超过第二个边界,否则它将重置为相同的值。

于 2013-08-12T12:06:07.333 回答