Pregunta

Tengo este sencillo problema de que obtiene una entrada desde el usuario utilizando una función comprueba entonces si la entrada es 'igual' a la "contraseña". Sin embargo, strcmp nunca regresaría a mi valor deseado, y el culpable es algún lugar de mi bucle que utiliza getch () para tomar cada carácter por separado y agregarlos a la matriz de caracteres. He encontrado esto por tener pantalla printf la matriz de caracteres. Si escribo en la palabra pase, la función sería mostrarlo como palabra pase". No tengo ni idea de por qué las comillas de cierre, y un espacio en blanco se incluyen en la matriz inmediatamente después de la palabra que he escrito en. ¿Alguna idea? Aquí está el código. gracias.

#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));
}
¿Fue útil?

Solución

  • El carbón gama password no lo hace tiene un caracter de terminación nulo.
  • Usted necesita asegurarse de que usted no lo hace cosas más de 8 carbón en password
  • También c++ debe ser ctr++

.

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

password[ctr] = 0;

Otros consejos

Usted está incrementando c en su bucle. Usted debe incrementar el CTR. Además, todas las cosas que dicen los demás (nulo terminador, sólo 8 caracteres, etc).

getch() es una función definida en un <conio.h> cabecera no estándar. Basándose en las características no estándar no se recomienda cuando se desea que su código sea portátil. :)

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

password[ctr] = '\0';
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top