ayuda con codigo (struct y arreglos)

Iniciado por angelica24, 20 Julio 2018, 23:01 PM

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

angelica24

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

#include <stdio.h>
#include <stdlib.h>

struct tlibro{
   char titulo[50];
   char autor[50];
   char editorial[30];
   int no_edicion;
   int anio_edicion;
   char clasificacion[30];
   long ISBN;

};



int i;
int opcion, n;

int main(int argc, char** argv) {
   
   tlibro arreglo[100];

   do {
       opcion = menu();
       switch (opcion) {
           case 1: crear(arreglo, n);
               break;case 2: eliminar();
               break;
           case 3: modificar();
               break;
           case 2: visualizar(arreglo, n);
               break;
           case 3: buscar(arreglo, n);
               break;
           default: printf("Esa opcion no existe\n");

       }
   }while(opcion!=6);



   return (EXIT_SUCCESS);
}

void menu(int o){

   printf("Seleccione una opcion:\n");
   printf("1.-Generar un nuevo registro de libro\n");
   printf("2.-Eliminar un registro de libro\n");
   printf("3.-Modificar un registro de libro\n");
   printf("4.-Visualizar todos los registros de libro\n");
   printf("5.-Buscar un registro de libro(por ISBN)\n");
   printf("6.-Terminar\n");
   scanf("%d", &opcion);

}

void crear(tlibro libros[], int indice) {
   for (i = 0; i < 100; i++) {

       printf("Proporcione el titulo del libro: \n");
       scanf("%[^n]", &libros[i].titulo);
       printf("Proporcione el(los) nombre(s) del(los) autor(es)\n");
       scanf("%[^n]", &libros[i].autor);
       printf("Proporcione la editorial\n");
       scanf("%[^n]", &libros[i].editorial);
       printf("Proporcione el numero de edicion\n");
       scanf("%d", &libros[i].no_edicion);
       printf("Proporcione el año de edicion\n");
       scanf("%d", &libros[i].anio_edicion);
       printf("Proporcione la clasificacion(LCC)\n");
       scanf("%[^n]", &libros[i].clasificacion);
       printf("Proporcione el registro del libro(ISBN)\n");
       scanf("%d", &libros[i].ISBN);
   }
}

void visualizar(tlibro libros[], int indice) {
   
   int j=0;
   for(j=0; j<indice; j++){
   
       printf("Libro %d:\n", j+1);
       printf("%s\n", libros[j].titulo);
       printf("%s\n", libros[j].autor);
       printf("%s\n", libros[j].editorial);
       printf("%d\n", libros[j].no_edicion);
       printf("%d\n", libros[j].anio_edicion);
       printf("%s\n", libros[j].clasificacion);
       printf("%d\n", libros[j].ISBN);
   }
   
   
}

void buscar(tlibro libros[], int indice) {

   int i;
   long ISBN;
   
   printf("Indique el ISBN del libro a buscar: ");
   scanf("%d", &ISBN);
   
   for(i=0; i<indice; i++){
       if(ISBN==libros[i].ISBN){
           printf("Se encontro el libro cuyos datos son:\n");
           printf("%s", libros[i].titulo);
           printf("%s", libros[i].autor);
           printf("%s", libros[i].editorial);
           printf("%d", libros[i].no_edicion);
           printf("%d", libros[i].anio_edicion);
           printf("%s", libros[i].clasificacion);
           printf("%d", libros[i].ISBN);
       
       }
   
   
   }
 
}

void eliminar() {
}

void modificar() {
}

engel lex

Hola modifiqué tu código con etiquetas GeSHi para que fuera más legible...



es bueno que empiezes indicando que errores te da
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

angelica24

Estos son los mensajes que genera:



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

engel lex

los errores Wformat los puedes ignorar mientras aprendes....



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
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

void menu(int o);

así si el contenido y terminado en ";"




el siguiente error

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
opcion = menu();

y si vemos la linea 18
int opcion, n;

sin embargo menú
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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.