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