un getch sencilla () y problema strcmp
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));
}
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 serctr++
.
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';