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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa no entra en el if
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa no entra en el if  (Leído 1,688 veces)
juligarc10

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Programa no entra en el if
« en: 12 Diciembre 2018, 22:12 pm »

Hola amigos.

Tengo un pequeño problema. Tenía un programa que funcionaba, y cerré el ordenador y dejó de funcionar, no se por que. Quizás toqué algo y no me di cuenta. De todas formas, por mucho que miro el código no consigo ver el error. De hecho el código compila, pero no entra dentro del primer if, por mucho que la condición se cumpla. Aquí les dejo el código.

Código:
int menu3(){//menu asociado a la funcion de modificar los datos//
 {
        int opcion3;
cout <<"¿Que desea modificar?";//no he incluído la fecha ya que cuando alguien va a modificar sus datos, es porque ya está dado de alta, entonces la fecha no es un dato que se pueda modificar//
    do{
    cout <<"\n1. Nombre";
    cout << "\n2. DNI";
    cout << "\n3. Domicilio";
    cout << "\n4. Numero de cuenta";
    cout << "\n5. Tipo de cuenta";
    cout << "<\n6. Salir";
    opcion3=leerEntero ("\nOpcion: ");
    }while (opcion3<1 || opcion3>6);

    return opcion3;
    }
}
setClientes modificarDatos(setClientes variosClientes){
    int menu3();
    bool x=true;
    char comparacionDNI[10];
    char t[7]="ahorro";
    char p[10]="corriente";
    int longitud=9, longitud1=10, opcion3;
    int n=variosClientes.numClientes, i=0;
    leerCadena("Introduzca el DNI del cliente que desea modificar ", comparacionDNI);
    for (i=0;i<n;i++){
        if (strcmp(variosClientes.Clientes[i].DNI, comparacionDNI)==0){
            cout<<"El cliente cuyos datos desea modificar es "<<variosClientes.Clientes[i].nombre<<endl;
            opcion3=menu3();
            switch(opcion3){
            case 1:
                leerCadena("Nombre\n",variosClientes.Clientes[i].nombre);
                return (variosClientes);
                x=false;
                break;
            case 2:
                do {leerCadena("DNI\n", variosClientes.Clientes[i].DNI);
                }while (longitud!=strlen(variosClientes.Clientes[i].DNI));
                return (variosClientes);
                x=false;
                break;
            case 3:
                leerCadena("domicilio\n", variosClientes.Clientes[i].domicilio);
                return (variosClientes);
                x=false;
                break;
            case 4:
                do {leerCadena("NumCuenta\n", variosClientes.Clientes[i].numCuenta);
                }while (longitud1!=strlen(variosClientes.Clientes[i].numCuenta));
                return (variosClientes);
                break;
            case 5:
                do{leerCadena("tipoCuenta\n", variosClientes.Clientes[i].tipoCuenta);
                }while ((strcmp(variosClientes.Clientes[i].tipoCuenta, p)!=0)&&(strcmp(variosClientes.Clientes[i].tipoCuenta, t)!=0));
                return (variosClientes);
                x=false;
                break;
            }}

        else if ((strcmp(variosClientes.Clientes[i].DNI, comparacionDNI)!=0)&&(x==true)){
            cout<<"El cliente insertado no se encuentra en nuestros datos"<<endl;
            return (variosClientes);
        }
}
}

Un saludo y gracias.

P.D.: Cabe mencionar que no es un programa completo, sólo una función del programa.


En línea

juligarc10

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Programa no entra en el if
« Respuesta #1 en: 12 Diciembre 2018, 22:16 pm »

Amigos, me he dado cuenta que si comento el else if, ya entra en el primer if. Lo que no se es como implementar el else if para que funcione todo.  :( gracias.


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Programa no entra en el if
« Respuesta #2 en: 12 Diciembre 2018, 22:37 pm »

Para la próxima, en vez de postear dos veces, modifica el primer mensaje y añade lo quieras ahí.

Te recomiendo que pases el parámetro por referencia, así no se copia toda la estructura cada vez que llamas a la función y no necesitas devolver nada. Imagina llamar a la función (copias toda la estructura en memoria), buscas un DNI, este no existe y devuelves toda la estructura... Muy cansado no? Mejor pasar por referencia y si no existe lo que buscas, se acabó, ni hacemos copias ni las devolvemos...
Código
  1. void modificaDatos(setClientes &variosClientes);
Y por mucho que pongas...
Código
  1. x = false;
  2. break;
...después de cada <case> no se ejecutan nunca ya que una vez llegas a un <return> la función termina.

Asegúrate de que la función <leer...()> trata correctamente los saltos de línea. Puede que introduzcas como DNI "12345678\n" (el "\n" por el enter del final) y el DNI a comparar es sólo "12345678". Entonces no van a ser iguales. Esto puedes arreglarlo también usando <strncmp()> y ahí puedes especificar cuantos caracteres deben compararse:
Código
  1. if(strncmp("12345678\n", "12345678", 8) == 0) // para esa instruccion esas dos cadena son iguales

PD: No entiendo para qué sirve <bool x>. Me parece una variable innecesaria, además de que ni el nombre aporta información sobre su uso. Simplifícalo todo con un <if> y un <else>, no te hacen falta condicionales anidados.
Otra cosa, cuando mandes código elige el lenguaje en el desplegable de "código GeSHi" o añade "=cpp" sin las comillas de seguido al "code" de la primera etiqueta. Para que se resalte el código y salgan los números de línea. Es más fácil de ver y de señalar algo en una línea específica. :-X

Suerte. :-X
« Última modificación: 12 Diciembre 2018, 22:39 pm por YreX-DwX » En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
juligarc10

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Programa no entra en el if
« Respuesta #3 en: 12 Diciembre 2018, 22:51 pm »

Para la próxima, en vez de postear dos veces, modifica el primer mensaje y añade lo quieras ahí.

Te recomiendo que pases el parámetro por referencia, así no se copia toda la estructura cada vez que llamas a la función y no necesitas devolver nada. Imagina llamar a la función (copias toda la estructura en memoria), buscas un DNI, este no existe y devuelves toda la estructura... Muy cansado no? Mejor pasar por referencia y si no existe lo que buscas, se acabó, ni hacemos copias ni las devolvemos...
Código
  1. void modificaDatos(setClientes &variosClientes);
Y por mucho que pongas...
Código
  1. x = false;
  2. break;
...después de cada <case> no se ejecutan nunca ya que una vez llegas a un <return> la función termina.

Asegúrate de que la función <leer...()> trata correctamente los saltos de línea. Puede que introduzcas como DNI "12345678\n" (el "\n" por el enter del final) y el DNI a comparar es sólo "12345678". Entonces no van a ser iguales. Esto puedes arreglarlo también usando <strncmp()> y ahí puedes especificar cuantos caracteres deben compararse:
Código
  1. if(strncmp("12345678\n", "12345678", 8) == 0) // para esa instruccion esas dos cadena son iguales

PD: No entiendo para qué sirve <bool x>. Me parece una variable innecesaria, además de que ni el nombre aporta información sobre su uso. Simplifícalo todo con un <if> y un <else>, no te hacen falta condicionales anidados.
Otra cosa, cuando mandes código elige el lenguaje en el desplegable de "código GeSHi" o añade "=cpp" sin las comillas de seguido al "code" de la primera etiqueta. Para que se resalte el código y salgan los números de línea. Es más fácil de ver y de señalar algo en una línea específica. :-X

Suerte. :-X


Muchas gracias por los consejos. De todas formas no he conseguido solucionar el problema. No se que es lo que hace que sin el else if funcione y con el, el programa ignora el primer if y va directo hasta el else if.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
entra a un pc « 1 2 »
Hacking
nando_fp 13 10,425 Último mensaje 11 Junio 2011, 06:27 am
por Stocker
No entra msn « 1 2 »
Mensajería
kity54 18 14,445 Último mensaje 3 Noviembre 2011, 15:22 pm
por kity54
no entra en el if « 1 2 »
PHP
kakashi20 10 4,826 Último mensaje 26 Abril 2013, 10:23 am
por Wofo
Programa no entra a ciclo for
Java
edr89 6 3,168 Último mensaje 7 Junio 2015, 08:41 am
por edr89
El programa no entra en este "if"
Programación C/C++
juligarc10 3 1,630 Último mensaje 6 Diciembre 2018, 22:20 pm
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines