在控制台輸入的內容C#默認按照字符串進行處理,如果直接讓用戶一次輸入完畢就很難實現 顯示星號的功能。但是如果讓用戶一次只能輸入一個字符就,在將用戶輸入的字符替換為星號就可以實現了!
首先,C#中能讓用戶按下一個按鍵的方法就是Console.Readkey(),用戶一次只能按下一個按鍵,其中它的另外一個重載方法是Console.ReadKey(bool b),bool類型的參數用來控制是否在控制台上顯示用戶按下的按鍵。那麼我們可以傳入true參數,使用戶按下的按鍵不顯示在控制台上,這樣光標始終停留在原來的位置,然後在該位置打印一個*號即可實現。同時此方法的返回值為ConsoleKeyInfo類型。通過查MSND得知ConsoleKeyInfo類型是描述按下的控制台鍵,包括控制台鍵表示的字符以及 Shift、Alt 和 Ctrl 修改鍵的狀態。此類型數據類型是結構體類型,其中有兩個重要的屬性Key和KeyChar。其中的Key對應用於按下的某個按鍵,是枚舉類型,KeyChar是用戶按下按鍵對應的Unicode編碼字符。那麼這樣我就就能拿到用戶輸入的字符串和用戶按下的按鍵。用戶輸入密碼是一個循環的過程,當用戶按下按鍵輸入密碼時候設置不顯示字符,然後在相同位置打印一個*號,最後判斷用戶是否按下了回車鍵,這樣就結束了整個密碼輸入過程。
具體代碼如下
//控制台輸入密碼顯示星號
//定義一個字符串接收用戶輸入的內容
string
input =
null
;
Console.WriteLine(
"請輸入密碼"
);
while
(
true
)
{
//存儲用戶輸入的按鍵,並且在輸入的位置不顯示字符
ConsoleKeyInfo ck = Console.ReadKey(
true
);
//判斷用戶是否按下的Enter鍵
if
(ck.Key != ConsoleKey.Enter)
{
if
(ck.Key != ConsoleKey.Backspace)
{
//將用戶輸入的字符存入字符串中
input += ck.KeyChar.ToString();
//將用戶輸入的字符替換為*
Console.Write(
"*"
);
}
else
{
//刪除錯誤的字符
Console.Write(
"\b \b"
);
}
}
else
{
Console.WriteLine();
break
;
}
}
Console.WriteLine(
"你剛才輸入的是{0}"
, input);
Console.ReadKey();
最終實現效果如下