Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Entrar con contraseña

Estas en el tema de Entrar con contraseña en el foro de C/C++ en Foros del Web. Hola: Quiero tener una idea de C, ya que vengo del Java y no es tan fácil el cambio como creía. Una prueba muy sencilla ...
  #1 (permalink)  
Antiguo 11/09/2011, 14:33
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Entrar con contraseña

Hola:

Quiero tener una idea de C, ya que vengo del Java y no es tan fácil el cambio como creía.

Una prueba muy sencilla con Win32 de Visual C++ 2010 Express.

En el programa principal de C, que me pregunte una contraseña.
Tengo tres intento.
Si acierto, me que muestre un mensaje en pantalla y diga: Contraseña incorrecta.
Si fallo, la primera muestre en pantalla: Contraseña incorrecta.
Como son tres intentos, al acabar el tercer intento, muestre un mensaje: Te haz equivocado 3 veces. Vuelva a intentarlo dentro de 15 minutos.

¿Algún ejemplo?

Un cordial saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 12/09/2011, 07:56
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Entrar con contraseña

Te dejo un ejemplo (puede darte problemas con los caracteres como la ñ):

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define INTENTOS 3
  5.  
  6. int main(){
  7.  
  8.     char contraseña[12] = "password";
  9.     char contraseñaAdivinada[50];
  10.     int i=0;
  11.     int correcta = 0; //El 0 en C es falso, lo demás es verdadero
  12.  
  13.    
  14.     while (i++<INTENTOS && !correcta) //Realiza el bucle tres veces a no ser que acierte
  15.     {
  16.      printf("Introduzca la contraseña: ");
  17.      scanf("%s",contraseñaAdivinada);
  18.      if (strcmp(contraseña,contraseñaAdivinada)==0) //strcmp devuelve 0 si dos cadenas son iguales
  19.       {
  20.           printf("Contraseña correcta.\n");  
  21.           correcta = 1;
  22.       }
  23.      else  printf("Contraseña incorrecta.\n");   
  24.     }
  25.     if (!correcta)
  26.      printf("Te haz equivocado %d veces. Vuelva a intentarlo dentro de 15 minutos.\n",INTENTOS);
  27.     getchar(); //Toma el \n del buffer de la última entrada
  28.     getchar(); //Espera a que el usuario introduzca un caracter
  29. }

El principal problema son las cadenas de caracteres:

en C, las cadenas de caracteres son arrays de caracteres que finalizan con un \0 (siempre hay que dejar un caracter al final para el \0).

Si al leer de la entrada la contraseña, el usuario escribiese más de 49 caracteres, se podría salir de la zona de memoria asignada y dar o no error (por eso es muy peligroso).
  #3 (permalink)  
Antiguo 12/09/2011, 10:05
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Respuesta: Entrar con contraseña

Para evitar problemas de ese tipo esta fgets (con stdin) que permite espeficiar el numero maximo de caracteres a leer y ademas no deja basura en el buffer al leer.

http://www.cplusplus.com/reference/c.../cstdio/fgets/
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 12/09/2011, 10:23
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Entrar con contraseña

Pues sí, no me acordaba de como se llamaban las funciones que mencionas y por eso, no las he puesto. Pero es lo ideal. Muchas gracias por aclararlo.
  #5 (permalink)  
Antiguo 12/09/2011, 14:37
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Respuesta: Entrar con contraseña

De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 12/09/2011, 14:38
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Entrar con contraseña

Gracias por la ayuda gente.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar

Etiquetas: contraseña, programa, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:09.