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));
}
War es hilfreich?

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++ sein ctr++

.

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';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top