ein einfaches getch () und strcmp Problem
Frage
Ich habe dieses einfache Problem, dass eine Eingabe von dem Benutzer unter Verwendung einer Funktion prüft dann erhält, wenn die Eingabe in das „Passwort“ ‚gleich‘ ist. Allerdings würde strcmp nie meinen gewünschten Wert zurück, und die Schuldige sind irgendwo in meiner Schleife, dass Anwendungen getch () jedes Zeichen zu nehmen getrennt und füge sie das Zeichenfeld. Ich fand heraus, indem er diese Anzeige printf das Zeichenfeld. Wenn ich in Passwort eingeben, würde die Funktion als Passwort angezeigt werden.“Ich habe keine Ahnung, warum die abschließenden doppelten Anführungszeichen und ein Leerzeichen in dem Array direkt nach dem Wort I im typisierte. Jede Idee? Hier ist der Code ist. danke.
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <string.h>
int validateUser();
int main()
{
for(int x = 0;x<2;x++)
{
if(validateUser())
{
system("cls");
printf("\n\n\t\t** Welcome **"); break;
}
else
{
system("cls");
printf("\n\n\t\tIntruder Alert!");
system("cls");
}
}
system("PAUSE>nul");
return 0;
}
int validateUser()
{
char password[9];
char validate[] = "pass word";
int ctr = 0, c;
printf("Enter password : ");
do
{
c = getch();
if(c == 32)
{
printf(" ");
password[ctr] = c;
}
if(c != 13 && c != 8 && c != 32 )
{
printf("*");
password[ctr] = c;
}
c++;
}while(c != 13);
return (!strcmp(password, validate));
}
Lösung
- Ihr char-Array
password
nicht eine abschließende Null-Zeichen. - Sie benötigen, um sicherzustellen, dass Sie dies nicht tun
Sachen mehr als 8 Zeichen in
password
- Auch sollte
c++
seinctr++
.
do {
// stuff char into password.
ctr++;
}while(c != 13 && ctr <8);
password[ctr] = 0;
Andere Tipps
Sie Inkrementieren c in der Schleife. Sie sollten ctr werden erhöht wird. Auch all die Dinge alle anderen gesagt hat (null-Terminator, nur 8 Zeichen, etc).
getch()
ist eine Funktion in einem Nicht-Standard-Header <conio.h>
definiert. Unter Berufung auf Nicht-Standard-Funktionen wird nicht empfohlen, wenn Sie Ihren Code wollen tragbar sein. :)
do {
// stuff char into password.
++ctr;
} while(c != 13 && ctr < 9);
password[ctr] = '\0';