一个乱序输出问题
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
//输入起点数和终点数,无重复乱序输出其中的数,返回的是数组指针
int* OutOfOrder(int start,int end)
{
//申请放置生成结果的数组
int* ret = (int*)malloc((end - start+1)*sizeof(int));
//申请标志数组,用来标志随机生成的数是否已产生过
char* flag = (char*)malloc((end +1)*sizeof(char));
//初始化标志数组,全部值为‘0’
for(int j = 0;j<end+1;j++)
{
flag[j] = '0' ;
}
//根据时间设置随机种子
srand((unsigned)time(NULL));
//生成随机数,每次生成一个随机数,都先在标志数组里寻找这个随机数所对应的空间:如果其内容为1,代表已生成过,
//舍弃,重新运算;如果其内容不是1,将随机数放入结果数组,并在标志数组中找到随机数对应空间,填入1;
for(int i = 0;i< end - start + 1;i++)
{
int n;
n = rand()%(end -start +1)+start;
if('1'!=flag[n])
{
ret[i] = n;
flag[n] = '1';
}else
{
i--;
}
}
free(flag);
return ret;
}
void main()
{
int* result = OutOfOrder(0,42768);
for(int j =0;j<42769;j++)
{
printf("%d : %d\n",j,result[j]);
}
}
[解决办法]
Generates a pseudorandom number. A more secure version of this function is available, see rand_s.
int rand( void );
Return Value
rand returns a pseudorandom number, as described above. There is no error return.
Remarks
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX (32767). Use the srand function to seed the pseudorandom-number generator before calling rand.
Requirements
Routine
Required header
rand
<stdlib.h>
原来rand最大只能到32767。。。。