最近想写一个1A2B的小游戏来练习一下,结果在第一步生成随机数的时候就遇到了一点点问题。数组
游戏初始化时须要先生成一个四位随机数,且各位各不相等。因而最开始的思路是生成一个整数数组,只须要判断生成的随机数字是否跟以前的数字有重复,有则从新生成便可,可是以后发现两个问题。首先是,函数每次调用后生成的随机数是同样的。第二,生成的随机数若是0在第一位,则调用itoa函数时会被舍弃掉。dom
后来研究中发现,出现的缘由是srand放在了函数里,每次调用函数都就重置随机数种子至初始值,因而就会出现生成的随机数都同样的状况。至于第二种错误,能够经过另外一种方式来巧妙避免。代码以下,代码中的思路为:函数
先生成一个0-9的整数数组,再随机从中取一个数,只要不等于-1就将其取出放置到要生成的随机数中,并将该位置为-1。这样作也能提升一点点效率,而不用去删除数组成员。spa
1 /****************************************************************************** 2 *函数名称:void GetRandom(char * random) 3 *函数功能:产生一个各位数不相等的四位随机数 4 *入口参数:random为返回的随机数 5 *返 回 值:无 6 *备 注:先生成一个0-9的整数数组,再随机从中取四个数,每取一个将该位置为-1 7 *******************************************************************************/ 8 void GetRandom(char * random){ 9 int i, j[10], k; 10 for (i = 0; i < 10; i++){ 11 j[i] = i; 12 } 13 for(i = 0; i < 4; i++){ 14 //生成第i个随机数 15 k = (int)rand() % 10;//k为下标 16 while (j[k] == -1){ 17 k = (k + 1) % 10; 18 } 19 random[i] = '0' + j[k]; 20 j[k] = -1; 21 } 22 }