01 //p7b.c -- @CopyLeft by tsaiwn@cs.nctu.edu.tw 02 // 這是個小例子, 有助於你完成身分證號碼產生器的進階版 03 /// 因為 int rand( ) 所生的亂數每次重新 Run 程式會相同 (why?), 04 /// .. 若要不同, 則須要求"真的亂!" 05 // .. 這很簡單, 抓時間(time)來設定亂數種子(seed)就可! 06 // ... 類似 BASIC 語言的 randomize 07 ///=== === 08 // 另外, 也要確定你的產生器在只有輸入兩個 char 時, 09 // .. ID 頭兩碼會用你輸入的兩個 char, 但是要有防呆! 10 // .. 就是萬一輸入的兩碼事錯的要更正, 11 // .. 例如輸入 92 則 2 代表女生 OK, 但 9 要換成字母!! 12 // 其實, 在之前給大家的 p61.c 產生器已經有考慮了且已經寫好! 13 // .. 你要做的只有修改那個檢查是否要產生 ID 的小function 14 // .. 加入在輸入的長度 (strlen) 在 <= 2 時也回答 yes 就可了 ! 15 void randomize( ) { srand( time(0) ); } // 這樣就 OK 16 // 關於 rand( ) 與 srand( ) 請參看 K&R 課本第四章, 或上網查:-) 17 int main( ) { // 大多數 main program 都這樣開頭 18 int i; 19 printf("前面五個亂數每次會相同:\n %d", rand( )); 20 for(i=1; i<=4; ++i) printf(", %d", rand( ) ); 21 printf("\n"); 22 randomize( ); // 就是 srand( time(0) ); 23 printf("接著這五個亂數會不同:\n %d", rand( )); 24 for(i=1; i<=4; ++i) printf(", %d", rand( ) ); 25 printf("\n"); 26 printf("Bye bye!\nHit RETURN key ..."); 27 getchar( ); // 企圖讀取一個 char, 讓程式停著等 User 按 RETURN 鍵 28 return 0; // 告知作業系統(OS)表示我們這主程式正常結束 29 }// main( 30 ///////////////////////////////////////// 31 32 //////////////////////////////////////////////////////////// 33 /****** 34 D:\testc>path c:\Dev-Cpp\bin;%path% 35 D:\testc>gcc p7b.c 36 D:\testc>a.exe 37 前面五個亂數每次會相同: 38 41, 18467, 6334, 26500, 19169 39 接著這五個亂數會不同: 40 29272, 32581, 1264, 15949, 1033 41 Bye bye! 42 Hit RETURN key ... 43 44 D:\testc>a 45 前面五個亂數每次會相同: 46 41, 18467, 6334, 26500, 19169 47 接著這五個亂數會不同: 48 29282, 32058, 22089, 22603, 31977 49 Bye bye! 50 Hit RETURN key ... 51 52 D:\testc>a 53 前面五個亂數每次會相同: 54 41, 18467, 6334, 26500, 19169 55 接著這五個亂數會不同: 56 29367, 16604, 27805, 25657, 5244 57 Bye bye! 58 Hit RETURN key ... 59 60 D:\testc> 61 **********************/