Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: angelica24 en 20 Julio 2018, 23:01 pm



Título: ayuda con codigo (struct y arreglos)
Publicado por: angelica24 en 20 Julio 2018, 23:01 pm
hola, espero que me puedan ayudar, tengo que hacer un catalogo de libros con arreglos y struct, ya llevo algo pero cuando lo quiero probar me salen muchos errores, espero que me puedan ayudar

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct tlibro{
  5.    char titulo[50];
  6.    char autor[50];
  7.    char editorial[30];
  8.    int no_edicion;
  9.    int anio_edicion;
  10.    char clasificacion[30];
  11.    long ISBN;
  12.  
  13. };
  14.  
  15.  
  16.  
  17. int i;
  18. int opcion, n;
  19.  
  20. int main(int argc, char** argv) {
  21.  
  22.    tlibro arreglo[100];
  23.  
  24.    do {
  25.        opcion = menu();
  26.        switch (opcion) {
  27.            case 1: crear(arreglo, n);
  28.                break;case 2: eliminar();
  29.                break;
  30.            case 3: modificar();
  31.                break;
  32.            case 2: visualizar(arreglo, n);
  33.                break;
  34.            case 3: buscar(arreglo, n);
  35.                break;
  36.            default: printf("Esa opcion no existe\n");
  37.  
  38.        }
  39.    }while(opcion!=6);
  40.  
  41.  
  42.  
  43.    return (EXIT_SUCCESS);
  44. }
  45.  
  46. void menu(int o){
  47.  
  48.    printf("Seleccione una opcion:\n");
  49.    printf("1.-Generar un nuevo registro de libro\n");
  50.    printf("2.-Eliminar un registro de libro\n");
  51.    printf("3.-Modificar un registro de libro\n");
  52.    printf("4.-Visualizar todos los registros de libro\n");
  53.    printf("5.-Buscar un registro de libro(por ISBN)\n");
  54.    printf("6.-Terminar\n");
  55.    scanf("%d", &opcion);
  56.  
  57. }
  58.  
  59. void crear(tlibro libros[], int indice) {
  60.    for (i = 0; i < 100; i++) {
  61.  
  62.        printf("Proporcione el titulo del libro: \n");
  63.        scanf("%[^n]", &libros[i].titulo);
  64.        printf("Proporcione el(los) nombre(s) del(los) autor(es)\n");
  65.        scanf("%[^n]", &libros[i].autor);
  66.        printf("Proporcione la editorial\n");
  67.        scanf("%[^n]", &libros[i].editorial);
  68.        printf("Proporcione el numero de edicion\n");
  69.        scanf("%d", &libros[i].no_edicion);
  70.        printf("Proporcione el año de edicion\n");
  71.        scanf("%d", &libros[i].anio_edicion);
  72.        printf("Proporcione la clasificacion(LCC)\n");
  73.        scanf("%[^n]", &libros[i].clasificacion);
  74.        printf("Proporcione el registro del libro(ISBN)\n");
  75.        scanf("%d", &libros[i].ISBN);
  76.    }
  77. }
  78.  
  79. void visualizar(tlibro libros[], int indice) {
  80.  
  81.    int j=0;
  82.    for(j=0; j<indice; j++){
  83.  
  84.        printf("Libro %d:\n", j+1);
  85.        printf("%s\n", libros[j].titulo);
  86.        printf("%s\n", libros[j].autor);
  87.        printf("%s\n", libros[j].editorial);
  88.        printf("%d\n", libros[j].no_edicion);
  89.        printf("%d\n", libros[j].anio_edicion);
  90.        printf("%s\n", libros[j].clasificacion);
  91.        printf("%d\n", libros[j].ISBN);
  92.    }
  93.  
  94.  
  95. }
  96.  
  97. void buscar(tlibro libros[], int indice) {
  98.  
  99.    int i;
  100.    long ISBN;
  101.  
  102.    printf("Indique el ISBN del libro a buscar: ");
  103.    scanf("%d", &ISBN);
  104.  
  105.    for(i=0; i<indice; i++){
  106.        if(ISBN==libros[i].ISBN){
  107.            printf("Se encontro el libro cuyos datos son:\n");
  108.            printf("%s", libros[i].titulo);
  109.            printf("%s", libros[i].autor);
  110.            printf("%s", libros[i].editorial);
  111.            printf("%d", libros[i].no_edicion);
  112.            printf("%d", libros[i].anio_edicion);
  113.            printf("%s", libros[i].clasificacion);
  114.            printf("%d", libros[i].ISBN);
  115.  
  116.        }
  117.  
  118.  
  119.    }
  120.  
  121. }
  122.  
  123. void eliminar() {
  124. }
  125.  
  126. void modificar() {
  127. }
  128.  


Título: Re: ayuda con codigo (struct y arreglos)
Publicado por: engel lex en 20 Julio 2018, 23:09 pm
Hola modifiqué tu código con etiquetas GeSHi para que fuera más legible...



es bueno que empiezes indicando que errores te da


Título: Re: ayuda con codigo (struct y arreglos)
Publicado por: angelica24 en 21 Julio 2018, 00:04 am
Estos son los mensajes que genera:


Código:
ProgramaHector.c:29:18: warning: implicit declaration of function 'menu' is invalid in C99 [-Wimplicit-function-declaration]
        opcion = menu();
                 ^
ProgramaHector.c:31:21: warning: implicit declaration of function 'crear' is invalid in C99 [-Wimplicit-function-declaration]
            case 1: crear(arreglo, n);
                    ^
ProgramaHector.c:39:21: warning: implicit declaration of function 'visualizar' is invalid in C99 [-Wimplicit-function-declaration]
            case 2: visualizar(arreglo, n);
                    ^
ProgramaHector.c:41:21: warning: implicit declaration of function 'buscar' is invalid in C99 [-Wimplicit-function-declaration]
            case 3: buscar(arreglo, n);
                    ^
ProgramaHector.c:53:6: error: conflicting types for 'menu'
void menu(){
     ^
ProgramaHector.c:29:18: note: previous implicit declaration is here
        opcion = menu();
                 ^
ProgramaHector.c:68:6: error: conflicting types for 'crear'
void crear(struct tlibro libros[], int indice) {
     ^
ProgramaHector.c:31:21: note: previous implicit declaration is here
            case 1: crear(arreglo, n);
                    ^
ProgramaHector.c:72:21: warning: format specifies type 'char *' but the argument has type 'char (*)[50]' [-Wformat]
        scanf("%s", &libros[i].titulo);
               ~~   ^~~~~~~~~~~~~~~~~
ProgramaHector.c:74:21: warning: format specifies type 'char *' but the argument has type 'char (*)[50]' [-Wformat]
        scanf("%s", &libros[i].autor);
               ~~   ^~~~~~~~~~~~~~~~
ProgramaHector.c:76:21: warning: format specifies type 'char *' but the argument has type 'char (*)[30]' [-Wformat]
        scanf("%s", &libros[i].editorial);
               ~~   ^~~~~~~~~~~~~~~~~~~~
ProgramaHector.c:82:21: warning: format specifies type 'char *' but the argument has type 'char (*)[30]' [-Wformat]
        scanf("%s", &libros[i].clasificacion);
               ~~   ^~~~~~~~~~~~~~~~~~~~~~~~
ProgramaHector.c:84:21: warning: format specifies type 'int *' but the argument has type 'long *' [-Wformat]
        scanf("%d", &libros[i].ISBN);
               ~~   ^~~~~~~~~~~~~~~
               %ld
ProgramaHector.c:96:6: error: conflicting types for 'visualizar'
void visualizar(struct tlibro libros[], int indice) {
     ^
ProgramaHector.c:39:21: note: previous implicit declaration is here
            case 2: visualizar(arreglo, n);
                    ^
ProgramaHector.c:108:24: warning: format specifies type 'int' but the argument has type 'long' [-Wformat]
        printf("%d\n", libros[j].ISBN);
                ~~     ^~~~~~~~~~~~~~
                %ld
ProgramaHector.c:115:6: error: conflicting types for 'buscar'
void buscar(struct tlibro libros[], int indice) {
     ^
ProgramaHector.c:41:21: note: previous implicit declaration is here
            case 3: buscar(arreglo, n);
                    ^
ProgramaHector.c:121:17: warning: format specifies type 'int *' but the argument has type 'long *' [-Wformat]
    scanf("%d", &ISBN);
           ~~   ^~~~~
           %ld
ProgramaHector.c:132:26: warning: format specifies type 'int' but the argument has type 'long' [-Wformat]
            printf("%d", libros[i].ISBN);
                    ~~   ^~~~~~~~~~~~~~
                    %ld


Título: Re: ayuda con codigo (struct y arreglos)
Publicado por: engel lex en 21 Julio 2018, 00:13 am
los errores Wformat los puedes ignorar mientras aprendes....


Código:
warning: implicit declaration of function 'menu' is invalid in C99 [-Wimplicit-function-declaration]
        opcion = menu();

los primeros 4 son relacionados a la forma en que C lee el codigo... cuando lee el codigo imagina un cursor bajando linea a linea...

cuando llega a la linea 25
Código:
opcion = menu();

dará un error porque nunca ha leído ninguna función llamada "menu()"...

esto se resuelve de una de las 2 formas... o pones las declaraciones de las funciones antes de donde la vas a usar... o creas prototipos...

los prototipos es basicamente antes de main colocas la declaración de la funcion

Código:
void menu(int o);

así si el contenido y terminado en ";"



el siguiente error

Código:
ProgramaHector.c:53:6: error: conflicting types for 'menu'
void menu(){
     ^
ProgramaHector.c:29:18: note: previous implicit declaration is here
        opcion = menu();


linea 25
Código:
opcion = menu();

y si vemos la linea 18
Código:
int opcion, n;

sin embargo menú
Código:
void menu(int o)

es decir, no hay coherencia... void no tiene retorno, sin embargo en linea 25 le dijiste a opción que tomara su valor de menú... error por donde se vea...

lo mismo con las otras funciones



probablemente una de las cosas más importante de programar es aprender a leer los errores