#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int getR(){
srand((unsigned int)time(NULL));
return (int)rand()%100;
}
int main(){
int i=0;
puts("BEGIN");
for(;i < 100;i++){
printf("%d ", getR());
if((i+1) % 20 == 0)
puts("");
}
puts("\nEND");
return 0;
}
执行结果:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int getR(){
return (int)rand()%100;
}
int main(){
int i=0;
srand((unsigned int)time(NULL));//放在子函数getR()外面
puts("BEGIN");
for(;i < 100;i++){
printf("%d ", getR());
if((i+1) % 20 == 0)
puts("");
}
puts("\nEND");
return 0;
}
执行结果:
究其原因是程序一每次调用子函数都会执行srand()函数,而由于使用时间做种子,每次循环时间间隔不大,导致初始种子相同,结果就会相同。
总而言之,srand()函数只需执行一次即可。