如何获取新的Array值? C ++

时间:2013-08-12 11:57:17

标签: c++ arrays random 2d reset

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

感谢。

4 个答案:

答案 0 :(得分:1)

您不应多次拨打srand(除非您实际上想要重复一些随机数)。在你的情况下,我怀疑在同一秒内运行所有roll函数的可能性非常高,所以它们都会给出相同的随机数。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

如果您希望每次运行功能时都有新的随机值,只需将stand(time(0))移至main功能的开头

答案 3 :(得分:0)

srand (time(0));移至主要功能。

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