problema con while

Iniciado por m@o_614, 12 Febrero 2012, 06:43 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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("Menu\n");
    printf("1)Registrar cuenta\n");
    printf("2)Editar perfil\n");
    printf("3)Mensajes o Notificaciones\n");
    printf("4)Salir\n");
    do
    {
        printf("Elige una opcion:\n");
        scanf("%d",&opcion);
        switch(opcion)
        {
            case 1: printf("Registrarse \n");
                    printf("Nombre\n");
                    fflush(stdin);
                    gets(info_p.nombre);
                    printf("Apellidos\n");
                    fflush(stdin);
                    gets(info_p.apellidos);
                    printf("Correo Electronico\n");
                    fflush(stdin);
                    gets(info_p.correo_elect1);
                    printf("Contrasenia\n");
                    fflush(stdin);
                    gets(info_p.contrasenia);
                    printf("Pais\n");
                    fflush(stdin);
                    gets(info_p.pais);
                    printf("Ciudad\n");
                    fflush(stdin);
                    gets(info_p.ciudad);
                    printf("Edad\n");
                    fflush(stdin);
                    scanf("%d",&info_p.edad);
                    printf("\nBienvenid@ %s!!\n\n",info_p.nombre);
                    printf("Ingresar\n");
                    printf("Dame correo\n");
                    fflush(stdin);
                    gets(info_p.correo_elect2);
                    while(info_p.correo_elect1!=info_p.correo_elect2)
                    {
                        printf("Intentalo otra vez\n");
                        fflush(stdin);
                        gets(info_p.correo_elect2);
                    }
                    printf("El correo es el correcto\n");
                    break;
            case 2: printf("Editar perfil\n");
                    printf("Situacion sentimental\n\n");
                    printf("Elige:\n");
                    printf("1)Soltero\n");
                    printf("2)Casado\n");
                    printf("3)Union libre\n");
                    scanf("%d",&situacion);
                    switch(situacion)
                    {
                        case 1: printf("Soltero\n");
                                break;
                        case 2: printf("Casado\n");
                                break;
                        case 3: printf("Union libre\n");
                                break;
                        default:printf("No mostrar situacion sentimental\n");
                    }
                    printf("Formacion Academica\n");
                    fflush(stdin);
                    gets(info_p.escuela);
                    printf("Cumpleanios\n");
                    fflush(stdin);
                    gets(info_p.cumpleanios);
                    break;
            case 3: printf("Mensajes o Notificaciones\n");
                    printf("Quiere escribir un mensaje? (S/N)\n");
                    scanf("%c",&resp);
                    if(resp=='S')
                       printf("Escriba el mensaje\n");
                    else
                    if(resp=='N')
                       printf("Leer notificaciones\n");
                    else
                       printf("Error\n");
                    break;
            case 4: printf("Salir\n");
                    break;
        }
    }while(opcion!=4);
    return 0;
}

x64core

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

Ferno

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

m@o_614

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("Menu\n");
    printf("1)Registrar cuenta\n");
    printf("2)Editar perfil\n");
    printf("3)Mensajes o Notificaciones\n");
    printf("4)Salir\n");
    do
    {
        printf("Elige una opcion:\n");
        scanf("%d",&opcion);
        switch(opcion)
        {
            case 1: printf("Registrarse \n");
                    printf("Nombre\n");
                    fflush(stdin);
                    gets(info_p.nombre);
                    printf("Apellidos\n");
                    fflush(stdin);
                    gets(info_p.apellidos);
                    printf("Correo Electronico\n");
                    fflush(stdin);
                    gets(info_p.correo_elect1);
                    printf("Contrasenia\n");
                    fflush(stdin);
                    gets(info_p.contrasenia);
                    printf("Pais\n");
                    fflush(stdin);
                    gets(info_p.pais);
                    printf("Ciudad\n");
                    fflush(stdin);
                    gets(info_p.ciudad);
                    printf("Edad\n");
                    fflush(stdin);
                    scanf("%d",&info_p.edad);
                    printf("\nBienvenid@ %s!!\n\n",info_p.nombre);
                    printf("Ingresar\n");
                    printf("Dame correo\n");
                    fflush(stdin);
                    gets(info_p.correo_elect2);
                    i=strncmp(info_p.correo_elect1,info_p.correo_elect2,15);
                    while(i!=0)
                    {
                        printf("Intentalo otra vez\n");
                        fflush(stdin);
                        gets(info_p.correo_elect2);
                    }
                    printf("El correo es el correcto\n");
                    break;
            case 2: printf("Editar perfil\n");
                    printf("Situacion sentimental\n\n");
                    printf("Elige:\n");
                    printf("1)Soltero\n");
                    printf("2)Casado\n");
                    printf("3)Union libre\n");
                    scanf("%d",&situacion);
                    switch(situacion)
                    {
                        case 1: printf("Soltero\n");
                                break;
                        case 2: printf("Casado\n");
                                break;
                        case 3: printf("Union libre\n");
                                break;
                        default:printf("No mostrar situacion sentimental\n");
                    }
                    printf("Formacion Academica\n");
                    fflush(stdin);
                    gets(info_p.escuela);
                    printf("Cumpleanios\n");
                    fflush(stdin);
                    gets(info_p.cumpleanios);
                    break;
            case 3: printf("Mensajes o Notificaciones\n");
                    printf("Quiere escribir un mensaje? (S/N)\n");
                    break;
            case 4: printf("Salir\n");
                    break;
        }
    }while(opcion!=4);
    return 0;
}


estas fueron las modificaciones que hice :(

HdM

Buenas.

i=strncmp(info_p.correo_elect1,info_p.correo_elect2,15);
                    while(i!=0)
                    {
                        printf("Intentalo otra vez\n");
                        fflush(stdin);
                        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");
                        fflush(stdin);
                        gets(info_p.correo_elect2);
                         i=strncmp(info_p.correo_elect1,info_p.correo_elect2,15);
                    }


Saludos.

- Nice to see you again -