- 最後登錄
- 2024-11-15
- 在線時間
- 3277 小時
- 註冊時間
- 2004-8-20
- 閱讀權限
- 20
- 精華
- 0
- UID
- 12056
- 帖子
- 476
- 積分
- 967 點
- 潛水值
- 33239 米
| 若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php 恩...不好意思~因為vc2005並不能支援像sp[num]這樣的宣告(因為他無法確保)num會不為0
所以我直接把他砍掉(因為感覺用不到)
另外~大大果然還是選擇隨機產生...那程式碼應該能稍微改的簡單點...而且檢查方法雖然看起來很快~但是有漏洞
就是大大寫的- if(sp[j]==b)
- {
- j=-1;
- b=rand()%max+1;
- }
複製代碼 因為假設開獎號碼為1 2 3 4
然後當大大第五次搖出號碼為3....那麼會再第3次檢查時重新產生變數~但若是此次產生變數為1...那漏洞就產生了
所以...小的修改為~以下- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- void gen(int max,int num,int *x)
- {
- int i,j=0,b;
- srand(time(NULL));
- for(i=0;i<num;i++)
- {
- b=rand()%max+1;
- for(j=0;j<i;j++)
- {
- if(x[j]==b)
- {
- --i;
- j=-1; //j為-1表示有重複的數值~所以要重新產生亂數
- break;
- }
- }
- if(j!=-1)
- {
- x[i]=b;
- }
- }
- }
- int main(int argc, char *argv[])
- {
- int i,num=6,*y;
- y=(int*)malloc(sizeof(int)*num);
- gen(46,num,y);
- for(i=0;i<num;i++)
- p rintf("%d \n",*(y+i));
- free(y); //我印象中要把這記憶體空間釋放掉...不然假如這程式一直循環執行...會佔用越來越多記憶體~當然這程式不會~因為這程式到此就結束了~只是好習慣應該常常培養
- system("pause");
- return 1;
- }
複製代碼 ... |
|