Domanda

Ho questo problema semplice che ottiene un input da parte dell'utente mediante una funzione poi controlla se l'ingresso è 'uguale' per la "password". Tuttavia, strcmp non avrebbe mai tornare il mio valore desiderato, e il colpevole è da qualche parte nel mio ciclo che usi getch () di prendere ogni personaggio separatamente e aggiungerli alla matrice di caratteri. Ho trovato questo avendo visualizzazione printf matrice di caratteri. Se digito passa parola, la funzione sarebbe visualizzarlo come passa parola". Non ho idea sul motivo per cui il doppio apice chiusura e uno spazio bianco è stato incluso nella giusta matrice dopo la parola che ho digitato. Qualche idea? Ecco il codice. grazie.

#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));
}
È stato utile?

Soluzione

  • Il tuo char serie password non lo fa avere un carattere di terminazione null.
  • È necessario assicurarsi che non si roba più di 8 caratteri in password
  • Anche c++ dovrebbe essere ctr++

.

do {
 // stuff char into password.
 ctr++; 
}while(c != 13 && ctr <8);

password[ctr] = 0;

Altri suggerimenti

Si sta incrementando c nel vostro ciclo. Si dovrebbe essere l'incremento ctr. Inoltre, tutte le cose è già stato detto (null terminator, solo 8 caratteri, etc).

getch() è una funzione definita in un'intestazione <conio.h> non standard. Basandosi sulle caratteristiche non standard non è raccomandato quando si desidera che il codice sia portabile. :)

do {
   // stuff char into password.
   ++ctr; 
   } while(c != 13 && ctr < 9);

password[ctr] = '\0';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top