2016-06-23 4 views
0

Vor ein paar Tagen hatte ich Hilfe von Ihnen für ein fortgeschrittenes (Art von) Login-System in C++ gefragt. Dank Ihrer Unterstützung habe ich es richtig verstanden, aber jetzt möchte ich dem Programm weitere Funktionen hinzufügen. Derzeit ist es in der Lage, einen Benutzernamen-String aufzunehmen, eine Passwort-Zeichenkette aufzunehmen und das Passwort zu maskieren und sie beide mit voreingestellten Werten zu vergleichen, bis sie übereinstimmen.
Nun, das Problem ist, dass, da ich getchar() verwenden, um Daten in die Char-Array eingeben, auch wenn ich die Geben Schlüssel drücken, wird es das als eine Eingabe für das Array. Auch kann ich nur Werte bis zu 8 Zeichen eingeben, nach denen, auch ohne Enter, es automatisch zum nächsten Schritt geht.
Ich möchte den Code so geändert werden, dass es eine beliebige Anzahl von Zeichen als Eingabe annehmen kann, sie maskieren, und wenn der Benutzer Enter drückt, nimmt es weitere Werte, um mehr Array-Zeichen aufzufüllen. Also im Grunde fast wie cin außer es hallt '*' für jedes Zeichen entered.Here meinen Code:Login Programm Passwort Maskierung Verbesserung in C++

#include <iostream.h> 
#include <stdlib.h> 
#include <conio.h>` 

using namespace std; 
int main() 
{ 
    int i=0;string u,p;char parr[8],ch; 
    while (1) 
    { 
system("cls"); 
cout<<"Enter username."<<endl; 
cin>>u; 
system("cls"); 
cout<<"Enter password."<<endl; 
for (i=0;i<=7;++i) 
{ 
    ch=getch(); 
    parr[i]=ch; 
    cout<<'*'; 
} 

parr[8]='\0'; 
string p="password"; 

if (u=="username" && parr==p) 
{ 
    system("cls"); 
    cout<<"Welcome!"; 
    break; 
     } 

else 
{ 
    system("cls"); 
    cout<<"Username and password entered does not match! Please try again."; 
} 
getch(); 
    }  
    getch(); 
} 

Antwort

1

eine Bedingung hinzufügen zu beenden, nachdem eingeben und das Feld auf eine ziemlich große Größe erweitern:

char parr[30]; 

cout << "Enter password." << endl; 

for (i = 0; i < 29; ++i) 
{ 
    ch=getch(); 
    if (ch == '\r') 
    { 
     parr[i] == '\0'; 
     break; 
    } 
    parr[i]=ch; 
     cout<<'*'; 
} 
parr[29] = '\0'; 
+0

Whoa ! Enter wird durch '\ r' repräsentiert? Aber überall, wo ich in Google gesucht habe, war es '\ n' ... Deshalb bin ich falsch gelaufen, als ich dasselbe versuchte. Wie auch immer, danke für deine Antwort. Es funktioniert perfekt. –

+0

Übrigens, kennen Sie einen Weg, den Backspace-Schlüssel nicht zu berücksichtigen? –