(求助帖)C语言中rand函数
直接上代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 36000
int diceSum(void);
int main(void)
{
int diceFreq[11] = {0};
int i,diceNum;
int count;
for (count = 0; count < SIZE; count++)
{
dicNum = diceSum();
++diceFreq[diceNum - 2];
}
printf("diceNum\ttimes\n");
for (i = 0; i < 11; i++)
{
printf("%d\t%d\n", i +2, diceFreq[i]);
}
return 0;
}
int diceNum(void)
{
int fNum, lNum, sum;
srand(time(NULL));
lNum = (rand() % 6) + 1;
fNum = (rand() % 6) + 1;
sum = fNum + lNum;
return sum;
}
无法产生随机数
[解决办法]
主要问题在与你没次调用随机数前都运行一次
srand(time(NULL));
把随机数的种子重新初始化了
而且调用的频率很快时间,time(NULL)的返回值都没变化,所以初始化的结果都一样
也就是lNum和fNum的值也一样
应该把srand(time(NULL));放在main里就可以了
- C/C++ code
#include<stdio.h>#include<stdlib.h>#include<time.h>#define SIZE 36000int diceSum(void);int main(void){ int diceFreq[11] = {0}; int i,diceNum; int count; int j; srand(time(NULL)); for (count = 0; count < SIZE; count++) { diceNum = diceSum(); diceFreq[diceNum - 2]+=1; } printf("diceNum\ttimes\n"); for (i = 0; i < 11; i++) { printf("%d\t%d\n", i +2, diceFreq[i]); } return 0;}int diceSum(void){ int fNum, lNum, sum; lNum = (rand() % 6) + 1; fNum = (rand() % 6) + 1; sum = fNum + lNum; return sum;}
[解决办法]