一個極簡的控制台記憶力遊戲:程式隨機產生 N 位數字、顯示 1 秒後清除畫面,玩家需輸入剛才看到的數字。答對則位數 +1 繼續,答錯即結束並顯示正確答案。全程僅使用基本的循環、條件判斷,無指標、無陣列,適合 C 語言初學者練習。
double 精度)。#include
#include
#include
#include
void main(void) {
int i, j;
double k, n;
randomize(); // 初始化亂數種子 (Turbo C 專用)
for (i = 2; i < 20; i++) { // 位數從 2 遞增至 19
// 產生首位非零數字
do {
k = random(10);
} while (k == 0);
// 產生剩餘位數
for (j = 1; j <= i; j++) {
k = k * 10 + random(10);
}
clrscr(); // 清屏
printf("%.0lf", k); // 顯示數字 (無小數點)
sleep(1); // 延遲 1 秒 (Turbo C: delay(1000) 或 sleep(1))
clrscr(); // 再次清屏
scanf("%lf", &n); // 玩家輸入
if (k != n) break; // 答錯跳出
}
printf("\nMisremembered: %.0lf", k);
getch(); // 等待按鍵結束
}
randomize() + random(10)Turbo C 專用亂數函數,產生 0~9 整數。現代編譯器請改用 srand(time(NULL)) + rand() % 10。
double 存儲大整數利用 double 52 位尾數可精確表示 15~16 位十進制整數的特性,以 %.0lf 格式輸出無小數點。注意:超過 15 位可能出現精度誤差,故迴圈上限設 19 較保守。
clrscr()、sleep()、getch()皆為 Turbo C / DOS 環境專用函數:
clrscr() → 現代可用 system("cls") (Windows) 或 system("clear") (Linux/Mac)sleep(1) → Sleep(1000) (Windows) 或 sleep(1) (POSIX)getch() → _getch() (MSVC) 或自行實作無回顯輸入// 現代跨平台版本片段
#include
#include
#include
#ifdef _WIN32
#include
#define CLEAR_SCREEN() system("cls")
#define SLEEP_MS(ms) Sleep(ms)
#else
#include
#define CLEAR_SCREEN() system("clear")
#define SLEEP_MS(ms) usleep((ms)*1000)
#endif
int main() {
srand(time(NULL));
// ... 邏輯同前,替換 random(10) 為 rand()%10
// 替換 clrscr() → CLEAR_SCREEN()
// 替換 sleep(1) → SLEEP_MS(1000)
}
double 精度限制,支援百位數挑戰。