最近想寫一個1A2B的小游戲來練習(xí)一下,結(jié)果在第一步生成隨機(jī)數(shù)的時候就遇到了一點(diǎn)點(diǎn)問題。

  游戲初始化時需要先生成一個四位隨機(jī)數(shù),且各位各不相等。于是最開始的思路是生成一個整數(shù)數(shù)組,只需要判斷生成的隨機(jī)數(shù)字是否跟之前的數(shù)字有重復(fù),有則重新生成即可,但是之后發(fā)現(xiàn)兩個問題。首先是,函數(shù)每次調(diào)用后生成的隨機(jī)數(shù)是一樣的。第二,生成的隨機(jī)數(shù)如果0在第一位,則調(diào)用itoa函數(shù)時會被舍棄掉。

  后來研究中發(fā)現(xiàn),出現(xiàn)的原因是srand放在了函數(shù)里,每次調(diào)用函數(shù)都就重置隨機(jī)數(shù)種子至初始值,于是就會出現(xiàn)生成的隨機(jī)數(shù)都一樣的情況。至于第二種錯誤,可以通過另一種方式來巧妙避免。代碼如下,代碼中的思路為:

  先生成一個0-9的整數(shù)數(shù)組,再隨機(jī)從中取一個數(shù),只要不等于-1就將其取出放置到要生成的隨機(jī)數(shù)中,并將該位置為-1。這樣做也能提高一點(diǎn)點(diǎn)效率,而不用去刪除數(shù)組成員。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 1 /****************************************************************************** 
 2 *函數(shù)名稱:void GetRandom(char * random) 3 *函數(shù)功能:產(chǎn)生一個各位數(shù)不相等的四位隨機(jī)數(shù) 
 4 *入口參數(shù):random為返回的隨機(jī)數(shù) 
 5 *返 回 值:無 
 6 *備 注:先生成一個0-9的整數(shù)數(shù)組,再隨機(jī)從中取四個數(shù),每取一個將該位置為-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個隨機(jī)數(shù) 15         k = (int)rand() % 10;//k為下標(biāo) 16         while (j[k] == -1){17             k = (k + 1) % 10; 
18         }19         random[i]