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. 大大:

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

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

  3. 請問如果要改變密碼,例如:
    我想把 “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 的結果喔!

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: