模擬真實登入系統的密碼驗證流程:最多允許 3 次嘗試,成功則進入系統,失敗則退出。這是系統安全基礎模組。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_ATTEMPTS 3
#define CORRECT_PASSWORD "123456"
#define MAX_INPUT_LEN 20
int main() {
char input[MAX_INPUT_LEN];
int attempt = 0;
int authenticated = 0;
printf("=== 系統登入 ===\n");
while (attempt < MAX_ATTEMPTS) {
printf("請輸入密碼 (剩餘 %d 次機會): ", MAX_ATTEMPTS - attempt);
if (scanf("%19s", input) != 1) {
printf("輸入錯誤,請重試。\n");
while (getchar() != '\n'); // 清理緩衝區
continue;
}
if (strcmp(input, CORRECT_PASSWORD) == 0) {
printf("\n✅ 登入成功!歡迎使用系統。\n");
authenticated = 1;
break;
} else {
attempt++;
if (attempt < MAX_ATTEMPTS) {
printf("❌ 密碼錯誤,請重新輸入。\n\n");
}
}
}
if (!authenticated) {
printf("\n🔒 密碼錯誤超過 %d 次,系統鎖定。\n", MAX_ATTEMPTS);
printf("請聯繫管理員解鎖或稍後再試。\n");
}
// system("pause"); // 僅 Windows,建議移除以提高可移植性
return 0;
}
%19s 防止緩衝區溢位(陣列大小 20,留 1 給結束符)| 特性 | ID 667 版本 | 本版本 (ID 670) |
|---|---|---|
| 輸入函數 | fgets (整行) | scanf (單詞) |
| 空格處理 | 支援密碼含空格 | 遇空格截斷 |
| 緩衝區保護 | fgets 自帶長度限制 | 手動指定 %19s |
| 適用場景 | 複雜密碼策略 | 簡單英數密碼 |