首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言模擬銀行密碼輸入:getch() 隱藏輸入、三次重試、鎖定機制完整實作

     編輯:關於C

功能需求

  • 預設密碼 aaaaaa(六位)
  • 輸入時顯示 * 隱藏明文
  • 最多嘗試 3 次,錯誤提示重試
  • 3 次失敗顯示「帳號已鎖,請至銀行解鎖」
  • 成功顯示「登入成功」

關鍵技術點

  • getch() / _getch():無回顯讀取單一字元(需 conio.h,Windows 專用)
  • putchar('*'):即時回顯星號
  • Enter 鍵 ASCII 13 結束輸入
  • 字元陣列比對驗證

完整程式碼(修正邏輯錯誤)

#include <stdio.h>
#include <string.h>
#include <conio.h>  // Windows 專用

int verifyPassword();

int main()
{
    if (verifyPassword() == 0)
        printf("\n登入成功!\n");
    else
        printf("\n帳號已鎖定,請至銀行櫃台解鎖。\n");
    return 0;
}

int verifyPassword()
{
    char correct[7] = "aaaaaa";
    char input[7];
    int attempts = 3;

    while (attempts-- > 0) {
        printf("請輸入6位密碼: ");
        int i = 0;
        char ch;
        while ((ch = _getch()) != '\r' && i < 6) {  // Enter=13='\r'
            putchar('*');
            input[i++] = ch;
        }
        input[i] = '\0';
        printf("\n");

        if (strcmp(input, correct) == 0)
            return 0;  // 成功

        printf("密碼錯誤,剩餘嘗試 %d 次\n", attempts);
    }
    return 1;  // 失敗
}

跨平台注意事項

  • Linux/macOS 無 conio.h,需用 termios.h 關閉回顯模式
  • 標準 C 無無回顯輸入函式,屬平台相關功能
  • 教學環境多用 Windows + Dev-C++/VC++,直接可用

安全性補充

真實銀行系統:

  1. 密碼加密儲存(bcrypt/Argon2),不可明文比對
  2. 傳輸加密(TLS),防竊聽
  3. 嘗試次數記錄於伺服器,非本地計數
  4. 硬體安全模組(HSM)保護金鑰

本程式僅供教學示範 getch 與流程控制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved