#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sep_gen(void);
int main()
{
srandom((unsigned)time(NULL));
printf("Random Numbers\n");
sep_gen();
sep_gen();
sep_gen();
return(0);
}
void sep_gen(void)
{
long int r;
int i;
for (i=0;i<10;i++)
putchar('-');
putchar('\n');
r=random();
printf("%ld\n",r);
}
Yukarıdaki kod, amaçlandığı gibi üç farklı tam sayı üretir. Ancak, srandom ((imzasız) zaman (NULL)) sep_gen() işlevi kullanıldığında, oluşturulan tam sayılar üç kez aynıdır. (Aşağıdaki kodu) Neden srandom (time (NULL)) main() işlevi ve kullanıcı tanımlı bir işlevden farklı davranır?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sep_gen(void);
int main()
{
printf("Random Numbers\n");
sep_gen();
sep_gen();
sep_gen();
return(0);
}
void sep_gen(void)
{
srandom((unsigned)time(NULL));
long int r;
int i;
for (i=0;i<10;i++)
putchar('-');
putchar('\n');
r=random();
printf("%ld\n",r);
}
Sorum
neden() işlevi srandom ana işlevi yerleştirildiğinde rasgele() fonksiyonu farklı sayılar üreten olmasıdır, ama ne zaman sep_gen() işlevi böylece yapmıyor?
'srandom işlevi standart bir işlev değildir. – Olaf
@Olaf: [Man sayfası] 'na göre POSIX.1-2001'in bir parçası (http://linux.die.net/man/3/srandom). Neden önemli olduğuna emin değilim. – ShadowRanger
@ShadowRanger: Bakın [ask] ve ne [mcve]. Örneğin, uygun bir etiket var. POSIX, aksi takdirde metinde olmalıdır. – Olaf