Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: matiapache12 en 26 Octubre 2016, 13:00 pm



Título: porque me tira error id returned 1 exit status ?
Publicado por: matiapache12 en 26 Octubre 2016, 13:00 pm
este es el main.c ::) ::)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <conio.h>
  5. #include "lib.h"
  6.  
  7. #define Amoladora 0
  8. #define Mezcladora 1
  9. #define Taladro 2
  10.  
  11.   int main()
  12. {
  13.    eTipoEquipo equipos[3];
  14.    eCliente clientes[100];
  15.    eAlquiler alquiler[100];
  16.    eAlquiler alquileres[100];
  17.    eTipoEquipo tipos;
  18.    int tam;
  19.    int idCliente=10;
  20.    int idAlquiler=20;
  21.    int altaC;
  22.    int i;
  23.    int id;
  24.    int altaA;
  25.    int cont[i];
  26.    inicializarClientes(clientes, 100);
  27.  
  28.    char seguir='s';
  29.    int opcion;
  30.    int confirma;
  31.  
  32.    do
  33.    {
  34.        printf("\n                             ::MENU DE OPCIONES::\n\n");
  35.        printf("1. Alta de cliente\n");
  36.        printf("2. Modificar datos del cliente\n");
  37.        printf("3. Baja del cliente\n");
  38.        printf("4. Nuevo alquiler\n");
  39.        printf("5. Fin del alquiler\n");
  40.        printf("6. Informar\n");
  41.        printf("7. Salir\n\n");
  42.  
  43.        printf("* Elija una opcion: ");
  44.        scanf("%d", &opcion);
  45.  
  46.        switch(opcion)
  47.        {
  48.        case 1:
  49.            altaC=altaCliente(clientes, idCliente, 100);
  50.            if (altaC!=-1)
  51.            {
  52.                cont[i]=cont[i]++;
  53.                idCliente++;
  54.            }
  55.            break;
  56.        case 2:
  57.            modificarCliente(clientes, idCliente, 100);
  58.            break;
  59.        case 3:
  60.            bajaCliente(clientes, idCliente, 100);
  61.            break;
  62.        case 4:
  63.            altaA=nuevoAlquiler(alquiler, clientes, equipos, 100, idAlquiler);
  64.            if (altaA!=-1)
  65.            {
  66.                idAlquiler++;
  67.            }
  68.            break;
  69.        case 5:
  70.            finAlquiler(alquiler, 100);
  71.            break;
  72.        case 6:
  73.            clienteRecurrente(alquileres,clientes , tam, id);
  74.            mayorAlquiler(alquileres,tipos , tam);
  75.            informar (alquileres,clientes,tipos,tam);
  76.            break;
  77.        case 7:
  78.            printf("Usted eligio salir. Confirma salir? s/n\n");
  79.            confirma=tolower(getch());
  80.            if (confirma=='s')
  81.            {
  82.                seguir='n';
  83.            }
  84.            else
  85.            {
  86.                break;
  87.            }
  88.            break;
  89.        }system("cls");
  90.    }while(seguir=='s');
  91. return 0;
  92. }
  93.  
  94.  
  95.  
  96. ESTE ES EL LIB.H ::) ::)
  97.  
  98.  
  99. #define LIB.H
  100. typedef struct
  101. {
  102.    int id;
  103.    int dni;
  104.    char nombre[20];
  105.    char apellido[20];
  106.    int estado;
  107. }eCliente;
  108.  
  109. typedef struct
  110. {
  111.    int idTipo;
  112.    char descripcion[10];
  113. }eTipoEquipo;
  114.  
  115. typedef struct
  116. {
  117.    int id;
  118.    int cliente;
  119.    int estado;
  120.    int equipo;
  121.    int tiempoEsti;
  122.    int tiempoReal;
  123. }eAlquiler;
  124.  
  125. /** \brief Inicializa los clientes con estado en 0
  126.  *
  127.  * \param Array de clientes
  128.  * \param Tamaño del array
  129.  *
  130.  */
  131. void inicializarClientes (eCliente[], int);
  132.  
  133. /** \brief Busca el primer espacio libre en el array de clientes
  134.  *
  135.  * \param Array de clientes
  136.  * \param Tamaño del array
  137.  * \return El indice del primer espacio libre
  138.  *
  139.  */
  140. int buscarLibre (eCliente[], int);
  141.  
  142. /** \brief Da de alta un cliente
  143.  *
  144.  * \param Array de clientes
  145.  * \param Id del cliente
  146.  * \param Tamaño del array
  147.  * \return El cliente
  148.  *
  149.  */
  150. int altaCliente (eCliente[], int, int);
  151.  
  152. /** \brief Modifica algunos datos seleccionados del cliente
  153.  *
  154.  * \param Array de clientes
  155.  * \param Id del cliente
  156.  * \param Tamaño del array
  157.  *
  158.  */
  159. void modificarCliente (eCliente[], int, int);
  160.  
  161. /** \brief Muestra los clientes habilitados en sistema
  162.  *
  163.  * \param Array de clientes
  164.  * \param Tamaño del array
  165.  *
  166.  */
  167. void mostrarClientes (eCliente[], int);
  168.  
  169. /** \brief Realiza la baja lógica de un cliente en sistema. (estado=2)
  170.  *
  171.  * \param Array de clientes
  172.  * \param ID del cliente
  173.  * \param Tamaño del array
  174.  *
  175.  */
  176. void bajaCliente (eCliente[], int, int);
  177.  
  178. /** \brief Muestra los tipos de equipos
  179.  *
  180.  * \param Array de tipos
  181.  * \param Tamaño del array
  182.  *
  183.  */
  184. void mostrarTipos(eTipoEquipo[], int);
  185.  
  186. /** \brief Habilita en sistema un nuevo alquiler
  187.  *
  188.  * \param Array de alquileres
  189.  * \param Array de clientes
  190.  * \param Array de tipos de equipos
  191.  * \param Tamaño del array
  192.  * \param ID del alquiler
  193.  * \return El indice del alquiler
  194.  *
  195.  */
  196. int nuevoAlquiler (eAlquiler[], eCliente[], eTipoEquipo[], int, int);
  197.  
  198. /** \brief Realiza el fin de un alquiler
  199.  *
  200.  * \param Array de alquileres
  201.  * \param Tamaño del array
  202.  *
  203.  */
  204. void finAlquiler (eAlquiler[], int);
  205.  
  206. /** \brief Busca un alquiler por su ID
  207.  *
  208.  * \param Array de alquileres
  209.  * \param Tamaño del array
  210.  * \param ID del alquiler
  211.  * \return El indice del alquiler
  212.  *
  213.  */
  214. int buscarAlquiler (eAlquiler[], int, int);
  215.  
  216. /** \brief Informa segun varios criterios
  217.  *
  218.  * \param Array de clientes
  219.  * \param Tamaño del array
  220.  *
  221.  */
  222. int clienteRecurrente(eAlquiler[], eCliente[], int, int);
  223. int mayorAlquiler(eAlquiler[], eTipoEquipo, int);
  224. void informar (eAlquiler[], eCliente[],eTipoEquipo, int);
  225.  
  226.  
  227.  
  228. ESTE ES EL LIB.C ::) ::)
  229.  
  230.  
  231.  
  232. #include <stdio.h>
  233. #include <stdlib.h>
  234. #include <string.h>
  235. #include <ctype.h>
  236. #include <conio.h>
  237. #include "lib.h"
  238.  
  239. void inicializarClientes (eCliente clientes[], int tam)
  240. {
  241.    int i;
  242.    for (i=0;i<tam;i++)
  243.    {
  244.        clientes[i].estado=0;
  245.    }
  246. }
  247.  
  248. void inicializarTipos(eTipoEquipo tipo[], int tam)
  249. {
  250.        tipo[0].idTipo = 0;
  251.        strcpy(tipo[0].descripcion, "Amoladora");
  252.  
  253.        tipo[1].idTipo = 1;
  254.        strcpy(tipo[1].descripcion, "Mezcladora");
  255.  
  256.        tipo[2].idTipo = 2;
  257.        strcpy(tipo[2].descripcion, "Taladro");
  258. }
  259.  
  260. int buscarLibre (eCliente clientes[], int tam)
  261. {
  262.    int indice=-1;
  263.    int i;
  264.    for (i=0;i<tam;i++)
  265.    {
  266.        if(clientes[i].estado == 0)
  267.        {
  268.            indice=i;
  269.            break;
  270.        }
  271.    }
  272.    return indice;
  273. }
  274.  
  275. int buscarCliente (eCliente clientes[], int tam, int id)
  276. {
  277.    int indice=-1;
  278.    int i;
  279.    for (i=0;i<tam;i++)
  280.    {
  281.        if (clientes[i].id == id)
  282.        {
  283.            indice=i;
  284.            break;
  285.        }
  286.    }
  287.    return indice;
  288. }
  289.  
  290. int altaCliente (eCliente clientes[], int id, int tam)
  291. {
  292.    int indice;
  293.    int i;
  294.    int cont[i];
  295.    char auxCad[40];
  296.    indice=buscarLibre(clientes, tam);
  297.    cont[i]=0;
  298.    if (indice==-1)
  299.    {
  300.        printf("No hay mas espacio de carga de clientes. Verifique.\n");
  301.    }
  302.    else
  303.    {
  304.        cont[i]=cont[i]+1;
  305.        clientes[indice].id=id;
  306.        printf("\nID: %d\n", clientes[indice].id);
  307.  
  308.        printf("Ingrese el DNI: ");
  309.        fflush(stdin);
  310.        scanf("%d", &clientes[indice].dni);
  311.        while (clientes[indice].dni < 0)
  312.        {
  313.            printf("El DNI debe ser positivo. Reingrese: ");
  314.            fflush(stdin);
  315.            scanf("%d", &clientes[indice].dni);
  316.        }
  317.  
  318.        printf("Ingrese el nombre: ");
  319.        fflush(stdin);
  320.        gets(auxCad);
  321.        while (strlen(auxCad)>20)
  322.        {
  323.            printf("Nombre demasiado largo. Reingrese: ");
  324.            fflush(stdin);
  325.            gets(auxCad);
  326.        }
  327.        strcpy(clientes[indice].nombre, auxCad);
  328.  
  329.        printf("Ingrese el apellido: ");
  330.        fflush(stdin);
  331.        gets(auxCad);
  332.        while (strlen(auxCad)>20)
  333.        {
  334.            printf("Apellido demasiado largo. Reingrese: ");
  335.            fflush(stdin);
  336.            gets(auxCad);
  337.        }
  338.        strcpy(clientes[indice].apellido, auxCad);
  339.  
  340.        clientes[indice].estado=1;
  341.        printf("Cliente cargado exitosamente.\n");
  342.    }
  343.    system("pause");
  344.    return indice;
  345. }
  346.  
  347. void mostrarClientes (eCliente clientes[], int tam)
  348. {
  349.    int i;
  350.  
  351.    printf("\n                  ::Clientes habilitados::\n\n");
  352.    for (i=0;i<tam;i++)
  353.    {
  354.        if (clientes[i].estado == 1)
  355.        {
  356.            printf("\nID: %d\n", clientes[i].id);
  357.            printf("DNI: %d\n", clientes[i].dni);
  358.            printf("Nombre: %s\n", clientes[i].nombre);
  359.            printf("Apellido: %s\n", clientes[i].apellido);
  360.        }
  361.    }
  362. }
  363.  
  364. void modificarCliente (eCliente clientes[], int id, int tam)
  365. {
  366.    int indice;
  367.    int opcion;
  368.    char auxCad[40];
  369.  
  370.    mostrarClientes(clientes, tam);
  371.  
  372.    printf("\nIngrese el ID del cliente a modificar: ");
  373.    fflush(stdin);
  374.    scanf("%d", &id);
  375.  
  376.    indice=buscarCliente(clientes, tam, id);
  377.    if (indice==-1)
  378.    {
  379.        printf("El cliente no esta en el sistema. Verifique el ID.\n");
  380.        system("pause");
  381.    }
  382.    else
  383.    {
  384.        printf("\n                            ::MENU DE MODIFICACION::\n\n");
  385.  
  386.        printf("1. Nombre\n");
  387.        printf("2. Apellido\n\n");
  388.  
  389.        printf("Escoja una opcion: ");
  390.        fflush(stdin);
  391.        scanf("%d", &opcion);
  392.  
  393.        switch (opcion)
  394.        {
  395.        case 1:
  396.            printf("Ingrese el nuevo nombre: ");
  397.            fflush(stdin);
  398.            gets(auxCad);
  399.            while (strlen(auxCad)>20)
  400.            {
  401.            printf("Nombre demasiado largo. Reingrese: ");
  402.            fflush(stdin);
  403.            gets(auxCad);
  404.            }
  405.            strcpy(clientes[indice].nombre, auxCad);
  406.            printf("Nombre modificado con exito.\n");
  407.            system("pause");
  408.            break;
  409.        case 2:
  410.            printf("Ingrese el nuevo apellido: ");
  411.            fflush(stdin);
  412.            gets(auxCad);
  413.            while (strlen(auxCad)>20)
  414.            {
  415.            printf("Apellido demasiado largo. Reingrese: ");
  416.            fflush(stdin);
  417.            gets(auxCad);
  418.            }
  419.            strcpy(clientes[indice].apellido, auxCad);
  420.            printf("Apellido modificado con exito.\n");
  421.            system("pause");
  422.            break;
  423.        }
  424.    }
  425. }
  426.  
  427. void bajaCliente (eCliente clientes[], int id, int tam)
  428. {
  429.    int indice;
  430.    int confirma;
  431.  
  432.    mostrarClientes(clientes, tam);
  433.  
  434.    printf("\nIngrese ID del cliente que desea dar de baja: ");
  435.    scanf("%d", &id);
  436.  
  437.    indice=buscarCliente(clientes, tam, id);
  438.  
  439.    if (indice == -1)
  440.    {
  441.        printf("Este cliente no puede ser dado de baja porque no existe en el sistema.\n");
  442.        system("pause");
  443.    }
  444.    else
  445.    {
  446.        printf("Usted va a dar de baja a este cliente. Esta seguro de la baja? s/n\n");
  447.        confirma=tolower(getch());
  448.  
  449.        if (confirma == 's')
  450.        {
  451.            clientes[indice].estado=2;
  452.            printf("Cliente dado de baja exitosamente.\n");
  453.            system("pause");
  454.        }
  455.        else
  456.        {
  457.            printf("La baja ha sido cancelada.\n");
  458.            system("pause");
  459.        }
  460.    }
  461. }
  462.  
  463. int buscarLibreAlquiler (eAlquiler alquileres[], int tam)
  464. {
  465.    int indice=-1;
  466.    int i;
  467.    for (i=0;i<tam;i++)
  468.    {
  469.        if(alquileres[i].estado == 0)
  470.        {
  471.            indice=i;
  472.            break;
  473.        }
  474.    }
  475.    return indice;
  476. }
  477.  
  478. int menuTipo(eTipoEquipo tipos[], int tam)
  479. {
  480.    int tipo;
  481.    mostrarTipos(tipos, tam);
  482.    printf("Elija un tipo: ");
  483.    fflush(stdin);
  484.    scanf("%d", &tipo);
  485.  
  486.    return tipo;
  487. }
  488.  
  489. void mostrarTipos(eTipoEquipo tipos[], int tam)
  490. {
  491.    printf("\n         :: TIPOS DE EQUIPO ::\n\n");
  492.  
  493.    printf("0. Amoladora\n");
  494.    printf("1. Mezcladora\n");
  495.    printf("2. Taladro\n\n");
  496. }
  497.  
  498. int nuevoAlquiler (eAlquiler alquileres[], eCliente clientes[], eTipoEquipo equipos[], int tam, int id)
  499. {
  500.    int indice;
  501.    int aux;
  502.    indice=buscarLibreAlquiler(alquileres, tam);
  503.    if (indice==-1)
  504.    {
  505.        printf("\nNo hay mas espacio para cargar alquileres.\n");
  506.    }
  507.    else
  508.    {
  509.        alquileres[indice].id=id;
  510.        printf("\nID de alquiler: %d\n", alquileres[indice].id);
  511.        mostrarClientes(clientes, tam);
  512.        printf("\nID del cliente: ");
  513.        fflush(stdin);
  514.        scanf("%d", &alquileres[indice].cliente);
  515.        alquileres[indice].equipo=menuTipo(equipos, tam);
  516.        alquileres[indice].estado=1;
  517.        printf("\nElija un tiempo estimado: ");
  518.        fflush(stdin);
  519.        scanf("%d", &aux);
  520.        while (aux < 0)
  521.        {
  522.            printf("El tiempo no puede ser negativo. Reingrese: ");
  523.            fflush(stdin);
  524.            scanf("%d", &aux);
  525.        }
  526.        alquileres[indice].tiempoEsti=aux;
  527.        printf("\n\nAlquiler ingresado en sistema exitosamente. Volvera al menu principal.\n");
  528.        system("pause");
  529.    }
  530.    return indice;
  531. }
  532.  
  533. void mostrarAlquileres (eAlquiler alquileres[], int tam)
  534. {
  535.    char tipos[][15]={"Amoladora", "Mezcladora", "Taladro"};
  536.    int i;
  537.    int tipo;
  538.    int cont0;
  539.    int cont1;
  540.    int cont2;
  541.    printf("\n                             ::ALQUILERES EN CURSO::\n");
  542.  
  543.    for (i=0;i<tam;i++)
  544.    {
  545.        if (alquileres[i].estado==1)
  546.        {
  547.            if (alquileres[i].id >= 20 && alquileres[i].id <= 100)
  548.            {
  549.            printf("\n\nID del alquiler: %d\n", alquileres[i].id);
  550.            printf("ID del cliente: %d\n", alquileres[i].cliente);
  551.            printf("Tipo: %s\n", tipos[alquileres[i].equipo]);
  552.            printf("Tiempo estimado: %d\n", alquileres[i].tiempoEsti);
  553.        if(tipo==0)
  554.    {
  555.        cont0=cont0+1;
  556.    }
  557.    if(tipo==1)
  558.    {
  559.        cont1=cont1+1;
  560.    }
  561.    if(tipo==2)
  562.    {
  563.        cont2=cont2+1;
  564.    }
  565.            }
  566.        }
  567.    }
  568. }
  569.  
  570. int buscarAlquiler (eAlquiler alquileres[], int tam, int id)
  571. {
  572.    int indice=-1;
  573.    int i;
  574.    for (i=0;i<tam;i++)
  575.    {
  576.        if (alquileres[i].id == id)
  577.    {
  578.        indice=i;
  579.    }
  580.    }
  581.    return indice;
  582. }
  583.  
  584. void finAlquiler (eAlquiler alquileres[], int tam)
  585. {
  586.    int indice;
  587.    int id;
  588.    int confirma;
  589.  
  590.    mostrarAlquileres(alquileres, tam);
  591.  
  592.    printf("\nIngrese el ID del alquiler a finalizar: ");
  593.    fflush(stdin);
  594.    scanf("%d", &id);
  595.  
  596.    indice=buscarAlquiler(alquileres, tam, id);
  597.    if (indice==-1)
  598.    {
  599.        printf("El alquiler no fue encontrado. Verifique el ID.\n");
  600.        system("pause");
  601.    }
  602.    else
  603.    {
  604.        printf("Esta seguro que desea dar de baja este alquiler? s/n\n");
  605.        confirma=tolower(getch());
  606.        if (confirma == 's')
  607.        {
  608.            alquileres[indice].estado=2;
  609.            printf("Ingrese el tiempo real de este alquiler: ");
  610.            fflush(stdin);
  611.            scanf("%d", &alquileres[indice].tiempoReal);
  612.            printf("Alquiler finalizado.\n");
  613.            system("pause");
  614.        }
  615.        else
  616.        {
  617.            printf("Baja del alquiler cancelada.\n");
  618.            system("pause");
  619.        }
  620.    }
  621. }
  622. int clienteRecurrente(eAlquiler alquileres[], eCliente clientes[], int tam, int id)
  623. {
  624.    int indice;
  625.    int i;
  626.    mostrarAlquileres(alquileres, tam);
  627.    indice=buscarAlquiler(alquileres, tam, id);
  628. }
  629.  
  630. int mayorAlquiler(eAlquiler alquileres[],eTipoEquipo tipos,int tam)
  631. {
  632.    int indice;
  633.    int id;
  634.    int i;
  635.    mostrarAlquileres(alquileres, tam);
  636.    indice=buscarAlquiler(alquileres, tam, id);
  637.    int cont0;
  638.    int cont1;
  639.    int cont2;
  640.    int mayorAlq;
  641.     for (i=0;i<tam;i++)
  642.    {
  643.    if (indice==1)
  644.    {
  645.    if(cont0>cont1 && cont0>cont2)
  646.    {
  647.        mayorAlq=cont0;
  648.    }
  649.     if(cont1>cont0 && cont1>cont2)
  650.    {
  651.        mayorAlq=cont1;
  652.    }
  653.     if(cont2>cont0 && cont2>cont1)
  654.    {
  655.        mayorAlq=cont2;
  656.    }
  657.        if(mayorAlq==cont0)
  658.    {
  659.        printf("el equipo mas alquilado fue la amoladora, y se alquilo %d veces\n",cont0);
  660.    }
  661.    if(mayorAlq==cont1)
  662.    {
  663.        printf("el equipo mas alquilado fue la mezcladora, y se alquilo %d veces\n",cont1);
  664.    }
  665.    if(mayorAlq==cont2)
  666.    {
  667.        printf("el equipo mas alquilado fue el taladro, y se alquilo %d veces\n",cont2);
  668.    }
  669.    }
  670.    }
  671. }
  672. void informar (eAlquiler alquileres[], eCliente clientes[], eTipoEquipo tipos,int tam)
  673. {
  674.    int opcion;
  675.    printf("\n                             ::INFORMAR::\n\n");
  676.    printf("1. Asociado con mas alquileres\n");
  677.    printf("2. Los equipos mas alquilados\n");
  678.    printf("3. Tiempo promedio real de alquiler\n");
  679.  
  680.    printf("\n* Elija una opcion: ");
  681.    fflush(stdin);
  682.    scanf("%d", &opcion);
  683.  
  684.    switch(opcion)
  685.    {
  686.        case 1:
  687.            break;
  688.        case 2:
  689.            mayorAlquiler(alquileres,tipos,tam);
  690.            break;
  691.        case 3:
  692.            mostrarAlquileres(alquileres, tam);
  693.            break;
  694.    }
  695. }


ya se habran dado cuenta lo que tengo que hacer, dar alta a un cliente, poder modificarlo y borrarlo, y hacer que alquile, eso me sale.
pero el profesor me pidio que haga un informar para que este informe 3 cosas
-la persona de id con mas alquileres.
-el equipo mas alquilado.
-mostrar el tiempo estimado, por favor ayudaaa ya nose que hacer






Mod: Los códigos deben ir en etiquetas GeSHi, no se debe escribir en mayúsculas


Título: Re: porque me tira error id returned 1 exit status ?
Publicado por: engel lex en 26 Octubre 2016, 14:58 pm
intentaste usar el debugger de tu ide y correr el programa?


Título: Re: porque me tira error id returned 1 exit status ?
Publicado por: matiapache12 en 26 Octubre 2016, 15:06 pm
si y no me hace nada, necesito que alguien me ayude porfa, tengo que entregar este parcial ahora


Título: Re: porque me tira error id returned 1 exit status ?
Publicado por: engel lex en 26 Octubre 2016, 15:09 pm
Citar
si y no me hace nada

no se que trataste de decir... el debugger algo debe hacer, si te lanza error de exit estatus normalmente es que intentaste acceder a un punto de memoria ilegal...

tu programa es relativamente largo y hay que seguir cosas, aqui no se te va a dar hecho se te va a explicar como resolver el problema...

dime lo que intentaste con el debugger y que es lo "que no hace nada"


Título: Re: porque me tira error id returned 1 exit status ?
Publicado por: fary en 26 Octubre 2016, 15:15 pm
Como te dice Engel lex, di donde tienes el problema, si no es un poco complicado... lleva rato analizar código ya escrito.

Como dato, en un par de funciones te falta retornar la función.

Código
  1. int clienteRecurrente(eAlquiler alquileres[], eCliente clientes[], int tam, int id);
  2. int mayorAlquiler(eAlquiler alquileres[],eTipoEquipo tipos,int tam);

saludos.