當隨機數與延遲函數放入迴圈時,亂數種子 srand() 必須在迴圈外只呼叫一次,否則若迴圈執行速度極快,time(NULL) 傳回相同秒數,導致產生相同隨機序列。參數定義位置(全域/區域/靜態)影響函數行為與資料共享範圍。
scanf 讀取 double 用 %lfprintf 輸出 double 用 %f(%lf 亦可)程式碼展示四種 delay() 多載形式:
delay(time_t end):使用外部傳入的 end 作為基準delay(time_t end, double time_delay):可指定延遲秒數delay(time_t start, time_t end):使用全域變數 t_delay核心邏輯皆為:記錄起始時間,迴圈呼叫 time(&end) 直到 difftime(end, start) >= 目標延遲。注意 difftime 傳回 double 秒差。
srand(time(NULL)); // 僅初始化一次
for (i=0; i<10; i++) {
flag = createOrNot();
printf("%d\n", flag);
delay(); // 不同版本延遲
}
示範正確的亂數初始化位置與多種延遲呼叫方式。