Título: problema con while
Publicado por: m@o_614 en 12 Febrero 2012, 06:43 am
Tengo un problema con mi programa en la opcion numero 1 que me pide todos los datos para registrarme y despues me vuelve a pedir la contraseña, si esta contraseña coincide con la del registro ingresa y si no entra en el ciclo while hasta darle la correcta. Pero nunca sale del while y no se por que :-( de antemano gracias #include <stdio.h> #include <stdlib.h> typedef struct { char nombre[20]; char apellidos[20]; char ciudad[15]; char pais[15]; char escuela[25]; char correo_elect1[15]; char correo_elect2[15]; char contrasenia[10]; int edad; char cumpleanios[10]; }registro; int main() { registro info_p; int opcion,situacion; char resp; printf("1)Registrar cuenta\n"); printf("3)Mensajes o Notificaciones\n"); do { printf("Elige una opcion:\n"); switch(opcion) { case 1: printf("Registrarse \n"); printf("Correo Electronico\n"); gets(info_p. correo_elect1); gets(info_p. contrasenia); scanf("%d",&info_p. edad); printf("\nBienvenid@ %s!!\n\n",info_p. nombre); gets(info_p. correo_elect2); while(info_p.correo_elect1!=info_p.correo_elect2) { printf("Intentalo otra vez\n"); gets(info_p. correo_elect2); } printf("El correo es el correcto\n"); break; case 2: printf("Editar perfil\n"); printf("Situacion sentimental\n\n"); switch(situacion) { break; break; case 3: printf("Union libre\n"); break; default:printf("No mostrar situacion sentimental\n"); } printf("Formacion Academica\n"); gets(info_p. cumpleanios); break; case 3: printf("Mensajes o Notificaciones\n"); printf("Quiere escribir un mensaje? (S/N)\n"); if(resp=='S') printf("Escriba el mensaje\n"); else if(resp=='N') printf("Leer notificaciones\n"); else break; break; } }while(opcion!=4); return 0; }
Título: Re: problema con while
Publicado por: x64core en 12 Febrero 2012, 06:58 am
Comparar cadenas usa la funcion strcmp de la lib string.h
Título: Re: problema con while
Publicado por: Ferno en 12 Febrero 2012, 16:50 pm
Como te dijeron, la condición del while no estás bien porque estás comparando cadenas. Para comparar cadenas se utiliza la función strcmp.
http://c.conclase.net/librerias/?ansifun=strcmp
Con respecto al código, no utilices fflush(stdin), dicha función sólo se utiliza para archivos de salida.
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
Título: Re: problema con while
Publicado por: m@o_614 en 12 Febrero 2012, 22:38 pm
ya estoy utilizando el strncmp, la primera vez que le ingreso el correo si es correcto compila correctamente, pero cuando lo ingreso mal a la hora del segundo intento no importa si le ingreso el correo correcto el ciclo nunca se detiene #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char nombre[20]; char apellidos[20]; char ciudad[15]; char pais[15]; char escuela[25]; char correo_elect1[15]; char correo_elect2[15]; char contrasenia[10]; int edad; char cumpleanios[10]; }registro; int main() { registro info_p; int opcion,situacion,i; printf("1)Registrar cuenta\n"); printf("3)Mensajes o Notificaciones\n"); do { printf("Elige una opcion:\n"); switch(opcion) { case 1: printf("Registrarse \n"); printf("Correo Electronico\n"); gets(info_p. correo_elect1); gets(info_p. contrasenia); scanf("%d",&info_p. edad); printf("\nBienvenid@ %s!!\n\n",info_p. nombre); gets(info_p. correo_elect2); i =strncmp(info_p. correo_elect1,info_p. correo_elect2,15); while(i!=0) { printf("Intentalo otra vez\n"); gets(info_p. correo_elect2); } printf("El correo es el correcto\n"); break; case 2: printf("Editar perfil\n"); printf("Situacion sentimental\n\n"); switch(situacion) { break; break; case 3: printf("Union libre\n"); break; default:printf("No mostrar situacion sentimental\n"); } printf("Formacion Academica\n"); gets(info_p. cumpleanios); break; case 3: printf("Mensajes o Notificaciones\n"); printf("Quiere escribir un mensaje? (S/N)\n"); break; break; } }while(opcion!=4); return 0; }
estas fueron las modificaciones que hice :(
Título: Re: problema con while
Publicado por: HdM en 12 Febrero 2012, 23:32 pm
Buenas. i =strncmp(info_p. correo_elect1,info_p. correo_elect2,15); while(i!=0) { printf("Intentalo otra vez\n"); gets(info_p. correo_elect2); }
Si te fijas, la variable i sólo toma valor antes del bucle. Podrías hacer la comparación, como condición del while, ahorrándote el uso de una variable : while(strncmp(info_p. correo_elect1,info_p. correo_elect2,15)!=0)
o meter la comparación dentro del while: i =strncmp(info_p. correo_elect1,info_p. correo_elect2,15); while(i!=0) { printf("Intentalo otra vez\n"); gets(info_p. correo_elect2); i =strncmp(info_p. correo_elect1,info_p. correo_elect2,15); }
Saludos.
|