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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con while
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con while  (Leído 1,740 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
problema con while
« 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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct
  5. {
  6.    char nombre[20];
  7.    char apellidos[20];
  8.    char ciudad[15];
  9.    char pais[15];
  10.    char escuela[25];
  11.    char correo_elect1[15];
  12.    char correo_elect2[15];
  13.    char contrasenia[10];
  14.    int edad;
  15.    char cumpleanios[10];
  16.  
  17. }registro;
  18.  
  19. int main()
  20. {
  21.    registro info_p;
  22.    int opcion,situacion;
  23.    char resp;
  24.    printf("Menu\n");
  25.    printf("1)Registrar cuenta\n");
  26.    printf("2)Editar perfil\n");
  27.    printf("3)Mensajes o Notificaciones\n");
  28.    printf("4)Salir\n");
  29.    do
  30.    {
  31.        printf("Elige una opcion:\n");
  32.        scanf("%d",&opcion);
  33.        switch(opcion)
  34.        {
  35.            case 1: printf("Registrarse \n");
  36.                    printf("Nombre\n");
  37.                    fflush(stdin);
  38.                    gets(info_p.nombre);
  39.                    printf("Apellidos\n");
  40.                    fflush(stdin);
  41.                    gets(info_p.apellidos);
  42.                    printf("Correo Electronico\n");
  43.                    fflush(stdin);
  44.                    gets(info_p.correo_elect1);
  45.                    printf("Contrasenia\n");
  46.                    fflush(stdin);
  47.                    gets(info_p.contrasenia);
  48.                    printf("Pais\n");
  49.                    fflush(stdin);
  50.                    gets(info_p.pais);
  51.                    printf("Ciudad\n");
  52.                    fflush(stdin);
  53.                    gets(info_p.ciudad);
  54.                    printf("Edad\n");
  55.                    fflush(stdin);
  56.                    scanf("%d",&info_p.edad);
  57.                    printf("\nBienvenid@ %s!!\n\n",info_p.nombre);
  58.                    printf("Ingresar\n");
  59.                    printf("Dame correo\n");
  60.                    fflush(stdin);
  61.                    gets(info_p.correo_elect2);
  62.                    while(info_p.correo_elect1!=info_p.correo_elect2)
  63.                    {
  64.                        printf("Intentalo otra vez\n");
  65.                        fflush(stdin);
  66.                        gets(info_p.correo_elect2);
  67.                    }
  68.                    printf("El correo es el correcto\n");
  69.                    break;
  70.            case 2: printf("Editar perfil\n");
  71.                    printf("Situacion sentimental\n\n");
  72.                    printf("Elige:\n");
  73.                    printf("1)Soltero\n");
  74.                    printf("2)Casado\n");
  75.                    printf("3)Union libre\n");
  76.                    scanf("%d",&situacion);
  77.                    switch(situacion)
  78.                    {
  79.                        case 1: printf("Soltero\n");
  80.                                break;
  81.                        case 2: printf("Casado\n");
  82.                                break;
  83.                        case 3: printf("Union libre\n");
  84.                                break;
  85.                        default:printf("No mostrar situacion sentimental\n");
  86.                    }
  87.                    printf("Formacion Academica\n");
  88.                    fflush(stdin);
  89.                    gets(info_p.escuela);
  90.                    printf("Cumpleanios\n");
  91.                    fflush(stdin);
  92.                    gets(info_p.cumpleanios);
  93.                    break;
  94.            case 3: printf("Mensajes o Notificaciones\n");
  95.                    printf("Quiere escribir un mensaje? (S/N)\n");
  96.                    scanf("%c",&resp);
  97.                    if(resp=='S')
  98.                       printf("Escriba el mensaje\n");
  99.                    else
  100.                    if(resp=='N')
  101.                       printf("Leer notificaciones\n");
  102.                    else
  103.                       printf("Error\n");
  104.                    break;
  105.            case 4: printf("Salir\n");
  106.                    break;
  107.        }
  108.    }while(opcion!=4);
  109.    return 0;
  110. }
  111.  


En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: problema con while
« Respuesta #1 en: 12 Febrero 2012, 06:58 am »

Comparar cadenas usa la funcion strcmp de la lib string.h


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: problema con while
« Respuesta #2 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
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: problema con while
« Respuesta #3 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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct
  6. {
  7.    char nombre[20];
  8.    char apellidos[20];
  9.    char ciudad[15];
  10.    char pais[15];
  11.    char escuela[25];
  12.    char correo_elect1[15];
  13.    char correo_elect2[15];
  14.    char contrasenia[10];
  15.    int edad;
  16.    char cumpleanios[10];
  17.  
  18. }registro;
  19.  
  20. int main()
  21. {
  22.    registro info_p;
  23.    int opcion,situacion,i;
  24.    printf("Menu\n");
  25.    printf("1)Registrar cuenta\n");
  26.    printf("2)Editar perfil\n");
  27.    printf("3)Mensajes o Notificaciones\n");
  28.    printf("4)Salir\n");
  29.    do
  30.    {
  31.        printf("Elige una opcion:\n");
  32.        scanf("%d",&opcion);
  33.        switch(opcion)
  34.        {
  35.            case 1: printf("Registrarse \n");
  36.                    printf("Nombre\n");
  37.                    fflush(stdin);
  38.                    gets(info_p.nombre);
  39.                    printf("Apellidos\n");
  40.                    fflush(stdin);
  41.                    gets(info_p.apellidos);
  42.                    printf("Correo Electronico\n");
  43.                    fflush(stdin);
  44.                    gets(info_p.correo_elect1);
  45.                    printf("Contrasenia\n");
  46.                    fflush(stdin);
  47.                    gets(info_p.contrasenia);
  48.                    printf("Pais\n");
  49.                    fflush(stdin);
  50.                    gets(info_p.pais);
  51.                    printf("Ciudad\n");
  52.                    fflush(stdin);
  53.                    gets(info_p.ciudad);
  54.                    printf("Edad\n");
  55.                    fflush(stdin);
  56.                    scanf("%d",&info_p.edad);
  57.                    printf("\nBienvenid@ %s!!\n\n",info_p.nombre);
  58.                    printf("Ingresar\n");
  59.                    printf("Dame correo\n");
  60.                    fflush(stdin);
  61.                    gets(info_p.correo_elect2);
  62.                    i=strncmp(info_p.correo_elect1,info_p.correo_elect2,15);
  63.                    while(i!=0)
  64.                    {
  65.                        printf("Intentalo otra vez\n");
  66.                        fflush(stdin);
  67.                        gets(info_p.correo_elect2);
  68.                    }
  69.                    printf("El correo es el correcto\n");
  70.                    break;
  71.            case 2: printf("Editar perfil\n");
  72.                    printf("Situacion sentimental\n\n");
  73.                    printf("Elige:\n");
  74.                    printf("1)Soltero\n");
  75.                    printf("2)Casado\n");
  76.                    printf("3)Union libre\n");
  77.                    scanf("%d",&situacion);
  78.                    switch(situacion)
  79.                    {
  80.                        case 1: printf("Soltero\n");
  81.                                break;
  82.                        case 2: printf("Casado\n");
  83.                                break;
  84.                        case 3: printf("Union libre\n");
  85.                                break;
  86.                        default:printf("No mostrar situacion sentimental\n");
  87.                    }
  88.                    printf("Formacion Academica\n");
  89.                    fflush(stdin);
  90.                    gets(info_p.escuela);
  91.                    printf("Cumpleanios\n");
  92.                    fflush(stdin);
  93.                    gets(info_p.cumpleanios);
  94.                    break;
  95.            case 3: printf("Mensajes o Notificaciones\n");
  96.                    printf("Quiere escribir un mensaje? (S/N)\n");
  97.                    break;
  98.            case 4: printf("Salir\n");
  99.                    break;
  100.        }
  101.    }while(opcion!=4);
  102.    return 0;
  103. }
  104.  

estas fueron las modificaciones que hice :(
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: problema con while
« Respuesta #4 en: 12 Febrero 2012, 23:32 pm »

Buenas.

Código
  1. i=strncmp(info_p.correo_elect1,info_p.correo_elect2,15);
  2.                    while(i!=0)
  3.                    {
  4.                        printf("Intentalo otra vez\n");
  5.                        fflush(stdin);
  6.                        gets(info_p.correo_elect2);
  7.                    }

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 :

Código
  1. while(strncmp(info_p.correo_elect1,info_p.correo_elect2,15)!=0)

o meter la comparación dentro del while:

Código
  1. i=strncmp(info_p.correo_elect1,info_p.correo_elect2,15);
  2.                    while(i!=0)
  3.                    {
  4.                        printf("Intentalo otra vez\n");
  5.                        fflush(stdin);
  6.                        gets(info_p.correo_elect2);
  7.                         i=strncmp(info_p.correo_elect1,info_p.correo_elect2,15);
  8.                    }

Saludos.
En línea

- Nice to see you again -
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema BlueZScanner y problema de conexión
Hacking Mobile
Kasswed 3 6,323 Último mensaje 6 Mayo 2006, 22:04 pm
por Gospel
Problema Css o problema con el sidebar
Desarrollo Web
gaboomsk8 6 3,583 Último mensaje 27 Diciembre 2011, 21:56 pm
por gaboomsk8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines