C中的随机数

Random numbers in C

ZZU1

我尝试生成随机数,但它们是相同的…我三个EDOCX1不管怎样。 我该怎么办?

数组声明:

ZZU1


呼叫srand()外的环。你是reseeding它每一个迭代。 </P >

srand()种子的随机数的发电机,你得到一个不同的随机数序列depending的输入。你的回路的游程甚快,所以呼叫的time(NULL)总是时返回同样的值。你是resetting到同样的随机序列,与每一个迭代。作为一个通用的规则,只有在呼叫srand()曾经在你的程序。 </P >


不要打电话srand()每一次通过循环beforehand想做就做一次。 </P >


常见问题解答15到20将兴趣。和我是tempted来创建一个新的标签设计等问题。 </P >


alt text </P >


srand函数,这是一个"种子"随机数的发电机。在案例的你不知道,在计算机上随机数的真的是随机的。效应,对电脑是有一个列表的随机数,这似乎在它,和你使用srand告诉它的启动,在那名单,与每个呼叫rand()回归到下一项的列表。 </P >

的原因是你写的srand(time(NULL))to get to start随机数在一些点,这并不是要去的是同一时间,每一个你运行的程序(除非该程序的启动,在同一时间)。 </P >

什么?你是做repeatedly这里是讲"程序的重新随机号码表.的同一点(因为时间是一样的每一次你去的一环)。移动呼叫的srand外环,和你将得到正确的结果。 </P >


1
2
3
4
5
6
7
8
srand(time(NULL));

for(i = 0; i < n; i++){        
        printf("%d", time(NULL));
        for(j = 0; j < (n-1); j++){
            a[i,j] = rand();
        }
    }

一次呼叫及外环。 </P >


你需要打电话srand()之前进入环。srand()初始化的radnom号发电机与给定的种子和generates独特的序列的随机数的方法,这种子。 </P >

你的环executes甚快,每一个呼叫的time(NULL)YIELDS的同一时间(测量在秒)hence你初始化随机数发生器以同样的种子,每一个循环迭代。 </P >


谢尔盖,你得到的是不安的错误信息与a[i,j]版,是因为这是一个理想有效的表达。在逗号操作符evaluates的子表达式从左到右键和值时返回的最后一个表达式。因此,写作是a[i,j]编号的a[j]。。。。。。。什么是你收到的是打印的值的指针的第j个矢量在你的矩阵。 </P >


1
2
3
4
5
6
7
8
9
10
11
12
13
int** a;
int i;
printf("Enter array size:");
scanf("%d", &n);
if( n < 1 ){
    printf("Size should be > 0

"
);
    return NULL;
}
a = (int**)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
    a[i] = (int*)calloc(n-1, sizeof(int));

这里是我的阵列………………… </P >


1
2
3
4
5
6
srand(time(NULL));
for(i = 0; i < n; i++){
    for(j = 0; j < (n-1); j++){
        a[i,j] = rand();
    }
}

好的物。号是同样的………………… </P >