C#代碼實現在控制台輸入密碼顯示星號


     在控制台輸入的內容C#默認按照字符串進行處理,如果直接讓用戶一次輸入完畢就很難實現 顯示星號的功能。但是如果讓用戶一次只能輸入一個字符就,在將用戶輸入的字符替換為星號就可以實現了!

     首先,C#中能讓用戶按下一個按鍵的方法就是Console.Readkey(),用戶一次只能按下一個按鍵,其中它的另外一個重載方法是Console.ReadKey(bool b),bool類型的參數用來控制是否在控制台上顯示用戶按下的按鍵。那么我們可以傳入true參數,使用戶按下的按鍵不顯示在控制台上,這樣光標始終停留在原來的位置,然后在該位置打印一個*號即可實現。同時此方法的返回值為ConsoleKeyInfo類型。通過查MSND得知ConsoleKeyInfo類型是描述按下的控制台鍵,包括控制台鍵表示的字符以及 Shift、Alt 和 Ctrl 修改鍵的狀態。此類型數據類型是結構體類型,其中有兩個重要的屬性Key和KeyChar。其中的Key對應用於按下的某個按鍵,是枚舉類型,KeyChar是用戶按下按鍵對應的Unicode編碼字符。那么這樣我就就能拿到用戶輸入的字符串和用戶按下的按鍵。用戶輸入密碼是一個循環的過程,當用戶按下按鍵輸入密碼時候設置不顯示字符,然后在相同位置打印一個*號,最后判斷用戶是否按下了回車鍵,這樣就結束了整個密碼輸入過程。具體代碼如下

 1             //控制台輸入密碼顯示星號
 2 
 3             //定義一個字符串接收用戶輸入的內容
 4             string input = null;
 5 
 6             Console.WriteLine("請輸入密碼");
 7 
 8             while (true)
 9             {
10                 //存儲用戶輸入的按鍵,並且在輸入的位置不顯示字符
11                 ConsoleKeyInfo ck = Console.ReadKey(true);
12 
13                 //判斷用戶是否按下的Enter鍵
14                 if (ck.Key != ConsoleKey.Enter)
15                 {
16                     if (ck.Key != ConsoleKey.Backspace)
17                     {
18                         //將用戶輸入的字符存入字符串中
19                         input += ck.KeyChar.ToString();
20                         //將用戶輸入的字符替換為*
21                         Console.Write("*");
22                     }
23                     else
24                     {
25                         //刪除錯誤的字符
26                         Console.Write("\b \b");
27                     }
28                 }
29                 else
30                 {
31                     Console.WriteLine();
32 
33                     break;
34                 }
35             }
36 
37             Console.WriteLine("你剛才輸入的是{0}", input);
38 
39             Console.ReadKey();

最終實現效果如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM