Just My Life & My Work

[C++] 輸入密碼 (Input Password)

阿貞問了一個很簡單的程式,怎麼讓使用者輸入密碼,然後只顯示「*」,而隱藏真實字元,這在網路上登入系統中尋常可見,但要怎麼用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)

  1. Bill 的大頭貼

    大大:

    Hi!好久不見了!
    我又有一些問題,
    可以幫幫我嗎?
    如果說要空行的話要怎麼寫呢?
    我是如此:
    while((key = getch())!=1) //Ctrl+A 就離開
    if(key == 13) //碰到Enter
    {
    strcat(password,"\n"); //為什麼\n顯示不出來??
    cout<<endl;
    count += 2;
    }
    可是他竟然會有亂碼
    該如何呢?
    請大大幫助一下,
    謝謝!

  2. Bill 的大頭貼

    為什麼不能這樣寫?:
    char passch[6]="Hello";
    …………..
    if(password==passch)
    cout<<"Yes!\n";
    可以幫我看一下嗎?
    謝謝!

  3. Bill 的大頭貼

    請問如果要改變密碼,例如:
    我想把 “Hello" 設成密碼,然後一按下Enter
    它就會顯示"Yes"
    那程式碼要怎嚜寫?
    拜託大大回應一下!
    謝謝

回覆給HappyMan 取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲