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 #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"); } 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("%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: "); 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); } } } void eliminar() { } void modificar() { }
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: 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....
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 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 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 y si vemos la linea 18 sin embargo menú 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
|