srand(时间(nul))不能正常工作

时间:2015-05-10 13:02:47

标签: c

我有一个函数,我使用srand(time(null))并且它工作正常,在每次迭代时生成不同的数字。然后,我在我的函数中添加了一段时间,现在它在循环的每次迭代期间生成相同的两个数字。这是我的代码:

void readgraph()
{
    int i,vi=0,vj=0;
    for(i=0; i<nrVertices; i++)
        G[i]=NULL;

    for(i=0; i<nrVertices; i++)
    {
        srand(time(NULL));
        while(checkInsert(vi,vj)==false) //this is the while that I added
        {

            vi=rand()%nrVertices;
            vj=rand()%nrVertices;
            while(vj==vi)
            {
                vj=rand()%nrVertices;
            }
        }
        printf("%d %d\n",vi,vj);
        insert(vi,vj);
        insert(vj,vi);
    }
}

我怎么能解决这个问题呢?谢谢。

@milleniumbug我的“短编译代码”:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define MAX 10000
#include <sys/time.h>

typedef struct node
{
    struct node *next;
    int vertex;
} node;
int a[10000][10000];
int nrVertices=100;
int nrEdges=1000;
node *G[10000];          //heads of the linked list
void readgraph()
{
    int i,vi=0,vj=0;
    for(i=0; i<nrVertices; i++)
        G[i]=NULL;
    for(i=0; i<nrEdges; i++)
    {
        while(checkInsert(vi,vj)==false)
        {

            vi=(rand()+i-2)%nrVertices;
            vj=(rand()+i+7)%nrVertices;
            while(vj==vi)
            {
                vj=rand()%nrVertices;
            }
        }
        printf("%d %d\n",vi,vj);
        //insert(vi,vj);
        //insert(vj,vi);
    }
}
int main()
{ 
    srand(time(NULL));
    readgraph();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

你应该运行srand 一次 - 否则你每次都只是重新初始化状态,这使你使用time(NULL),生成的数字只会在下一秒再次发生变化,是完全可以预测的。