elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No reconoce contraseña
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No reconoce contraseña  (Leído 3,120 veces)
Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
No reconoce contraseña
« en: 6 Julio 2014, 11:50 am »

Muy buenas, con el fin de ir practicando y aprendiendo, me he puesto a crear una especie de jueguecito, y lo primero que he hecho ha sido crear un menu, para crear tu cuenta y luego ingresar con ella, (una chorrada ya que por ahora será de un solo jugador, pero para ir manejando el asunto), el problema está en que cuando se supone que he creado una cuenta, luego al ingresar con ella me dice dice que el nombre o la pass son incorrectos (no es que sean incorrectos, sino que directamente no reconoce lo que he creado antes), supongo que el problema será que cuando "creo" la nueva cuenta, no se me guarda correctamente en la variable, o quizás que no busque bien donde está la contraseña nueva, no tengo ni idea. Aquí tenéis el código, segurísimo que tendré mil fallos, pero espero ir poco a poco corrigiendo y aprendiendo. Gracias de antemano.

Código
  1. #include <stdio.h>
  2.  
  3. int menu();
  4. int menujuego();
  5.  
  6. main(){
  7.  
  8.    menu();
  9.  
  10.  
  11. }
  12.  
  13. int menu(){
  14.    int op;
  15.    char nombre[20], nombre1[20];
  16.    char pass[20], pass1[20];
  17.    char m;
  18.  
  19.    printf("(1) Entrar a su cuenta\n");
  20.    printf("(2) Crear nueva cuenta\n");
  21.    scanf("%d",&op);
  22.  
  23.    switch(op){
  24.        case 1 :
  25.            system("cls");
  26.            printf("Introduzca el nombre de su cuenta:  ");
  27.            fflush(stdin);
  28.            gets(nombre);
  29.            printf("Introduzca la contrasena:  ");
  30.            fflush(stdin);
  31.            gets(pass);
  32.  
  33.            if(nombre == *nombre1 && pass == *pass1){
  34.                menujuego();
  35.            }
  36.            else{
  37.            while(nombre != *nombre1 || pass != *pass1){
  38.                system("cls");
  39.                printf("Nombre o contrasena incorrectos, intenta de nuevo. \n");
  40.                printf("Introduzca el nombre de su cuenta:  ");
  41.                fflush(stdin);
  42.                gets(nombre);
  43.                printf("Introduzca la contrasena:  ");
  44.                fflush(stdin);
  45.                gets(pass);
  46.                }
  47.            }
  48.            break;
  49.        case 2 :
  50.            system("cls");
  51.            printf("Introduzca su nombre para la nueva cuenta:  ");
  52.            fflush(stdin);
  53.            gets(nombre1);
  54.            printf("Introduzca la contrasena:  ");
  55.            fflush(stdin);
  56.            gets(pass1);    
  57.  
  58.            while(m!='M'){
  59.            system("cls");
  60.            printf("Cuenta creada con exito. Pulsa \"M\" para volver al menu: \n");
  61.            scanf("%c",&m);
  62.        }
  63.            system("cls");
  64.            if(m == 'M'){
  65.                menu();
  66.            }
  67.            break;
  68.        default :
  69.            system("cls");
  70.            printf("Elija una opcion correcta. \n");
  71.            menu();
  72.    }
  73.  
  74.    return op;
  75. }
  76.  
  77. int menujuego(){
  78.    system("cls");
  79.    printf("MENU\nMENU\nMENU\nMENU");
  80. }


En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: No reconoce contraseña
« Respuesta #1 en: 6 Julio 2014, 12:50 pm »

............l problema está en que cuando se supone que he creado una cuenta, luego al ingresar con ella me dice dice que el nombre o la pass son incorrectos (no es que sean incorrectos, sino que directamente no reconoce lo que he creado antes), supongo que el problema será que cuando "creo" la nueva cuenta, no se me guarda correctamente en la variable, o quizás que no busque bien donde está la contraseña nueva........

Estas comparando cadenas con:

Código
  1. if(nombre == *nombre1 && pass == *pass1)

Y eso es sólo para caracteres o números. Tendrías que usar, tanto en el if com en el while:

Código
  1. if(strcmp (nombre , nombre1)!=0  || strcmp (pass , pass1)!=0)

Con la función "strcmp " de la librería string.h.

Deberías leerte Lo que no hay que hacer en C/C++. Nivel basico donde se explica porqué no se debe usar gets y fflush(stdin).

¡¡¡¡ Saluditos! ..... !!!!




En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: No reconoce contraseña
« Respuesta #2 en: 6 Julio 2014, 13:06 pm »

Muchas gracias leosansan! Ahora mismo pruebo con strcmp  :) y gracias por el link, ya me lo había mirado, pero me surgían más dudas.

Por ejemplo, para usar fgets en vez de scanf, sería así :

Código
  1. scanf("%d",&op);
  2.  
cambiarlo por :

Código
  1. fgets(op, 1, stdin);
  2.  
¿Sería así? Y, al declarar op, se pondría : int op; de forma normal ¿?


Edito: He probado con el código que me comentas, y de esa forma accede al menu del juego con cualquier combinación, da igual que sea la cuenta creada o no. ¿Como lo tengo que poner para que compare el nombre que se escribe con el nombre de la cuenta que se ha creade anteriormente?
« Última modificación: 6 Julio 2014, 13:18 pm por Baal_30 » En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: No reconoce contraseña
« Respuesta #3 en: 6 Julio 2014, 13:54 pm »

Muchas gracias leosansan! Ahora mismo pruebo con strcmp  :) y gracias por el link, ya me lo había mirado, pero me surgían más dudas.
.............................
Edito: He probado con el código que me comentas, y de esa forma accede al menu del juego con cualquier combinación, da igual que sea la cuenta creada o no. ¿Como lo tengo que poner para que compare el nombre que se escribe con el nombre de la cuenta que se ha creada anteriormente?

Lo del scanf para op lo dejaría como está, aunque sería más correcto validar dicha entrada.

Sorry, pero copié y pegué mal:

Código
  1. if((strcmp (nombre , nombre1))==0  && (strcmp (pass , pass1))==0)
  2. ..........................
  3. while(strcmp (nombre , nombre1)!=0  || strcmp (pass , pass1)!=0)

Además deberías declarar las variables  nombre1 y pass1 con el prefijo static para que mantengan el valor al ser invocadas nuevamente por la función:

Código
  1. char nombre[20], pass[20];
  2. static char nombre1[20], pass1[20];

¡¡¡¡ Saluditos! ..... !!!!



EDITO:

Se me olvidó comentarte que main es de tipo int y lleva al final el correspondiente return:

Código
  1. int main(){
  2.    menu();
  3.    return 0;
  4. }
« Última modificación: 6 Julio 2014, 17:32 pm por leosansan » En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: No reconoce contraseña
« Respuesta #4 en: 6 Julio 2014, 14:48 pm »

Uff que grande leosansan. Ahora va genial.

Lo que no entiendo muy bien es lo de static, así, ¿sin static, no mantendrían el valor? ¿que valor tendrían entonces?

Y lo de main, creía que no había que poner int, y si es main, ¿dónde devuelve el valor de return?

Gracias!!!!
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: No reconoce contraseña
« Respuesta #5 en: 6 Julio 2014, 15:01 pm »

Uff que grande leosansan. Ahora va genial.

Lo que no entiendo muy bien es lo de static, así, ¿sin static, no mantendrían el valor? ¿que valor tendrían entonces?

Y lo de main, creía que no había que poner int, y si es main, ¿dónde devuelve el valor de return?

Gracias!!!!

Lo del static es para que en llamadas sucesivas a la función no se pierdan los valores de las variables declaradas como static.

Si no lo hicieras así en la nueva llamada a la función esas variables contendrían "basura". Haz la prueba y quita lo de static y veras que aunque entres los mismos valores para las variables correspondientes el programa dice que no son iguales de manera continua y es que perderías los valores previamente introducidos por valores impredecibles. Es como si no hubieras introducido los valores anteriores y claro las variables apuntan a direcciones cualesquiera.

Y lo del main es porque el estándar de C/C++ lo establece así y punto. Es más, si te fijas el compilador debe lanzar un "warning" alertando sobre ello.

En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: No reconoce contraseña
« Respuesta #6 en: 6 Julio 2014, 15:20 pm »

Okey, todo clarito ;) Muchas gracias por la ayuda, un abrazo!
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No me reconoce los cd de 900 MB
Software
SonIc 3 3,323 Último mensaje 27 Marzo 2005, 22:31 pm
por Cobac
no puedo conectarme a una red con contraseña sabiendo la contraseña
Redes
phoeboo 2 5,669 Último mensaje 24 Junio 2010, 06:47 am
por zhyzura
Spotify reconoce el hackeo de sus datos y pedirá un cambio de contraseña
Noticias
wolfbcn 0 1,498 Último mensaje 27 Mayo 2014, 18:01 pm
por wolfbcn
Después de instalar AD no reconoce contraseña de administrador
Redes
Platanito Mx 2 3,122 Último mensaje 26 Noviembre 2017, 23:18 pm
por Platanito Mx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines