功能需求
- 預設密碼
"123456"。
- 使用者最多嘗試 3 次。
- 成功顯示「登入成功」,失敗 3 次顯示「三次輸入有誤」並退出。
完整程式碼
#include
#include
#include
int main() {
int i = 0;
char input[10];
char *passwd = "123456";
for (i = 1; i <= 3; i++) { // 修正:原碼 1<3 恆真導致無限迴圈
printf("請輸入密碼> ");
scanf("%s", input); // 修正:input 本身是陣列名即地址,無需 &
if (strcmp(passwd, input) == 0) {
break;
} else {
printf("密碼輸入錯誤\n");
if (i == 3) {
printf("三次輸入有誤!\n");
exit(0);
}
}
}
printf("登入成功!\n");
return 0;
}
關鍵修正說明
- 迴圈條件:原碼
for(i=1; 1<3; i++) 中 1<3 恆為真,導致無限迴圈。已修正為 i <= 3。
- scanf 參數:
input 為 char[10],陣列名轉型為指標,scanf("%s", input) 即可,原碼誤加 &。
- 字串比較:
strcmp 回傳 0 代表相等,邏輯正確。
安全性補充
scanf("%s") 不限制長度,易造成緩衝區溢位。建議用 scanf("%9s", input) 或 fgets。
- 實際專案應使用雜湊比對,不可明文儲存密碼。