阿貞問了一個很簡單的程式,怎麼讓使用者輸入密碼,然後只顯示「*」,而隱藏真實字元,這在網路上登入系統中尋常可見,但要怎麼用C++來寫呢?
先來看程式碼:
/**
Theme: Input Password
Compiler: Dev C++ 4.9.9.2
Date: 100/05/03
Author: ShengWen
Blog: https://cg2010studio.wordpress.com/
*/
#include<iostream>
#include<conio.h>
using namespace std;
const int NUMBER=30;
const int ENTER=13;
int main(){
int key;
char password[NUMBER];
int countx=0;
cout<<"請輸入少於等於20字元的密碼:"<<endl;
while((key=getch())!=ENTER&&countx<20){
password[countx]=(char)key;
if(key=='\b'){
cout<<'\b'<<' '<<'\b';
if(countx-1>0){countx--;}
else{countx=0;}
}
else if((key>='0'&&key<='9')||
(key>='A'&&key<='Z')||
(key>='a'&&key<='z')){
cout<<'*';
countx++;
}
else{
}
}
cout<<endl;
if(countx>=20){
cout<<"輸入超過20個字元!"<<endl;
}
password[countx]='\0';
cout<<"你的密碼是:"<<password<<endl;
system("pause");
return EXIT_SUCCESS;
}
基本上要使用getch()這一個函式,記得引用conio.h。
阿那達希望可以使用backspace鍵,如果使用者輸入錯誤,還可以倒退修正。接著我還想到可以實做delete鍵,但在此我就沒有寫了,有興趣的人寫寫看吧~
正常執行結果:
請輸入少於等於20字元的密碼:
*********
你的密碼是:howareyou
請按任意鍵繼續 . . .
我本來要輸入「how are you?」,然而我設定只能輸入0-9、A-Z、a-z等62個字元,於是會忽略「 」(空白鍵)、「,.?:;'"()[]{}+-*/\」(標點符號)等等。
不正常執行結果:
請輸入少於等於20字元的密碼:
******
你的密碼是:RSGOIQ
請按任意鍵繼續 . . .
你猜我輸入什麼密碼?感覺是個笨問題!但我相信聰明的你還是答錯了,因為我按了insert、delete、home、end、pageup、pagedown,分別對應R、S、G、O、I、Q,是不是很奇怪呢?我也很好奇,知道的人告訴我一下吧~
Comments on: "[C++] 輸入密碼 (Input Password)" (11)
大大:
Hi!好久不見了!
我又有一些問題,
可以幫幫我嗎?
如果說要空行的話要怎麼寫呢?
我是如此:
while((key = getch())!=1) //Ctrl+A 就離開
if(key == 13) //碰到Enter
{
strcat(password,"\n"); //為什麼\n顯示不出來??
cout<<endl;
count += 2;
}
可是他竟然會有亂碼
該如何呢?
請大大幫助一下,
謝謝!
讚讚
密碼沒有「空行」這符號吧!
看不到的字元就要你自己嘗試了……
讚讚
喔~~~
好吧 🙂
謝謝您!
讚讚
為什麼不能這樣寫?:
char passch[6]="Hello";
…………..
if(password==passch)
cout<<"Yes!\n";
可以幫我看一下嗎?
謝謝!
讚讚
char array並沒有定義==可以作為比較的運算子,
所以只能跑迴圈來判斷每一個字元是否符合。
讚讚
感激不盡….!!
讚讚
不客氣:)
讚讚
請問如果要改變密碼,例如:
我想把 “Hello" 設成密碼,然後一按下Enter
它就會顯示"Yes"
那程式碼要怎嚜寫?
拜託大大回應一下!
謝謝
讚讚
設定一個array存Hello,
等待輸入後判斷是否與array一樣是Hello,
若是則輸出Yes。
這樣就可以寫出來囉~
讚讚
請問一下,有範例嗎?
人家是初學者…
謝謝
讚讚
在我的範例第39行插入這幾行程式碼:
char test[6]="Hello";
for(int i=0;i<6;i++){
if(password[i]!=test[i]){
cout<<"No"<<endl;
break;
}
if(i==5)
cout<<"Yes"<<endl;
}
接著編譯和執行,
試著輸入「Hello」和「hello」,
你就會得到 Yes 和 No 的結果喔!
讚讚