Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Gabriele7 en 25 Febrero 2017, 06:38 am



Título: Error, el programa se rompe
Publicado por: Gabriele7 en 25 Febrero 2017, 06:38 am
Mi problema es que estoy practicando para un examen de la universidad, todavía no vimos punteros, memoria dinámica, etc., solo llegamos hasta estructuras aviso por las dudas si es que ven que el programa no esta hecho de la manera adecuada.El problema en fin es que, cuenta con 4 funciones :

1) ingreso de datos
2) mostrar datos
3) buscar datos por nombre
4) mostrar los clientes con mejores salarios

El problema se da cuando, termino de ingresar los datos y pongo "Mostrar todos los datos" que es la función 2., el programa se rompe, ahora si elimino la función 4. todo funciona con normalidad, ¿que es lo que puede estar mal?.


Código:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#define N 5

    /*
        void ingresar(struct CLIENTES[], int); //terminado
       void buscar_datos(struct CLIENTES[], int); //terminado
      void mostrar_datos(struct CLIENTES[], int); //terminado con error!
    void ordenamiento_alfabetico(clientes);  // no terminado
    void ordenamiento_sexo(clientes);        //no terminado
    void ordenamiento_saldo(struct CLIENTES[], int);        terminado
    void ordenamiento_hombres_mejor_saldo(clientes);       //no terminado
    void ordenamiento_mujeres_mejor_saldo(clientes);       //no terminado
    */
    struct CLIENTES {
    char nombre[30];
    char apellido[30];
    char sexo;
    int DNI;
    int telefono;
    float saldo;
    int n_cuenta;
    char direccion[30];
   };

        //PROTOTIPOS///////////////////////////
         void ingresar(struct CLIENTES[], int);
         void buscar_datos(struct CLIENTES[], int);
         void mostrar_datos(struct CLIENTES[], int);
         void ordenamiento_saldo(struct CLIENTES[], int);
         //////////////////////////////////////////////////

      int main() {
      struct CLIENTES clientes[N];

        int opcion;

      while (opcion != 5)
      {


    printf("Ingrese una Opcion : ");
    printf("\n\n");
    printf("Opcion 1: Ingresar los datos de los clientes :\n");
    printf("\n\n");
    printf("Opcion 2: Mostrar todos los datos de todos los clientes :\n");
    printf("\n\n");
    printf("Opcion 3:  Buscar datos de clientes por nombre :\n");
    printf("\n\n");
        printf("Opcion 4: Mostrar los datos de los clientes ordenados por     saldo de mayor a menor :");
    printf("\n\n");
    printf("Opcion 5 : Salir!");
    printf("\n\n");
    scanf("%i", &opcion);

    switch (opcion) {
    case 1: ingresar(clientes,N); break;
    case 2: mostrar_datos(clientes,N); break;
    case 3: buscar_datos(clientes,N); break;
    case 4: ordenamiento_saldo(clientes,N); break;
    case 5: break;
    default: printf("La opcion es incorrecta :"); break;
    }


   }
  return 0;
   }

 void ingresar(struct CLIENTES client[],int NUM) {
  int i;
    for (i = 0; i<NUM; i++) {
    printf("Ingrese su nombre :");
    scanf("%s", &client[i].nombre);

    printf("Ingrese su Apellido :");
    scanf("%s", &client[i].apellido);

    printf("Ingrese su sexo : M/F : ");
    scanf("%s", &client[i].sexo);

    printf("Ingrese el DNI :");
    scanf("%i", &client[i].DNI);

    printf("Ingrese su Telefono :");
    scanf("%i", &client[i].telefono);

    printf("Ingrese el saldo de su cuenta : ");
    scanf("%f", &client[i].saldo);


    printf("Ingrese su Numero de Cuenta :");
    scanf("%i", &client[i].n_cuenta);

    printf("Ingrese su direccion :");
    scanf("%s", &client[i].direccion);

         }
     }


 void mostrar_datos(struct CLIENTES dats[], int NUM) {
  int j;

 for (j = 0; j<NUM; j++) {
    printf("Nombre : %s", dats[j].nombre);
    printf("\n\n");
    printf("Apellido :%s ", dats[j].apellido);
    printf("\n\n");
    printf("Sexo : %c", dats[j].sexo);
    printf("\n\n");
    printf("DNI :%i", dats[j].DNI);
    printf("\n\n");
    printf("Numero de Cuenta : %i", dats[j].n_cuenta);
    printf("\n\n");
    printf("Saldo : %f",dats[j].saldo);
    printf("\n\n");
    printf("Direccion : %s", dats[j].direccion);
    printf("\n\n");
       }
  }

 void buscar_datos(struct CLIENTES buscar[], int NUM) {

int k;
char nombre_a_buscar[30];


printf("Ingrese el nombre a buscar : ");
scanf("%s", &nombre_a_buscar);



     for (k = 0; k<NUM; k++) {

    if (strcmp(buscar[k].nombre, nombre_a_buscar) == 0) {

        printf("Nombre : %s", buscar[k].nombre);
        printf("\n");
        printf("Apellido :%s ", buscar[k].apellido);
        printf("\n");
        printf("Sexo : %c",buscar[k].sexo );
        printf("\n");
        printf("DNI :%i", buscar[k].DNI);
        printf("\n");
        printf("Numero de Cuenta : %i", buscar[k].n_cuenta);
        printf("\n");
        printf("Saldo : %f",buscar[k].saldo);
        printf("\n");
        printf("Direccion : %s", buscar[k].direccion);

            }

         }



       }

    void ordenamiento_saldo(struct CLIENTES ordenamiento_client[],int NUM) {

   struct CLIENTES AUX;
   int i,j;

   for(i=0;i<NUM;i++){
    for(j=0;j<NUM-i-1;j++)
    if(ordenamiento_client[j].saldo > ordenamiento_client[j+1].saldo){
    AUX = ordenamiento_client[j];
    ordenamiento_client[j] = ordenamiento_client[j+1];
    ordenamiento_client[j+1] = AUX;
        }


     }
      printf("Los Clientes con mejores salarios son : ");
      printf("\n");
      for(i=5;i<0;i--){
       printf("Nombre : %s",ordenamiento_client[i].nombre);
       printf("\n");
       printf("Saldo : %f",ordenamiento_client[i].saldo);
       printf("\n");

      }

       getch();
     }


Título: Re: Error, el programa se rompe
Publicado por: theluigy13etv en 25 Febrero 2017, 13:30 pm
Lo acabo de probar y sí funciona bien. Cuando elijo la opción 2 me muestra los datos de las N personas ingresadas


Título: Re: Error, el programa se rompe
Publicado por: Gabriele7 en 25 Febrero 2017, 16:55 pm
Lo acabo de probar y sí funciona bien. Cuando elijo la opción 2 me muestra los datos de las N personas ingresadas

Probaste hasta la función 4? Proba todas vas a ver que en la 4 da error.