Autor
|
Tema: Ayuda con un programa en C (Leído 4,026 veces)
|
ivangc44
Desconectado
Mensajes: 8
|
Buenas, q tal estan??? Queria hacerles una pregunta que me urge, es la siguiente:
Estoy haciendo una base de datos para una libreria, que tiene como menu lo siguiente:
1. Añadir un nuevo libro. 2. Listar todos los libros. 3. Listar la información de un libro (dado su título). 4. Prestar/Devolver un libro (dado su título). 5. Borrar un libro (dado su título). 6. Salir de la aplicación.
Resulta que cuando lo hago, me deja añadir libros, pero no me saca nada. Es como si no me dejase guardarlos. Si alguien me pudiese ayudar con las funciones que ahi pongo, le estaria muy agradecido.
(No estaria mal q estuviese para antes del dia 6 de enero), muchisimas gracias.
|
|
|
En línea
|
|
|
|
El_Java
|
(No estaría mal que subieras el código antes de pedir tareas, gracias)
|
|
|
En línea
|
|
|
|
ivangc44
Desconectado
Mensajes: 8
|
ups....se me paso, sorry, aki va:
/* Inclusion de librerias */ #include <stdio.h> #include <conio.h> #include <stdlib.h> /* Definicion de constantes */ #define MAX_TITULO 35 #define MAX_AUTOR 20 #define MAX_LIBRO 10 /* Definicion de tipos creados por el programador */ struct fecha{ int anno; int mes; }; typedef struct fecha T_fecha;
struct libreria { T_fecha fecha_publicacion; char titulo[MAX_TITULO]; char autor[MAX_AUTOR]; }; typedef struct libreria T_libreria; /* Prototipos de funcion */ void menu(void); void recoger_libro(T_libreria libro[]); void mostrar_libro(T_libreria libro[]);
main(){ T_libreria libro[MAX_LIBRO]; char opc; int n, i; printf("***********************************************************\n"); printf("***********************************************************\n"); printf("** LIBRERIA **\n"); printf("** MI LIBRITO **\n"); printf("** **\n"); printf("** <<PON UN LIBRO EN TU VIDA>> **\n"); printf("***********************************************************\n"); printf("***********************************************************\n\n"); menu(); printf("Opci%cn elegida? ", 162); scanf("%c", &opc); while(opc == 'a' || opc == 'b' && opc != 'c' && opc != 'd' && opc != 'e' && opc!= 'f' && opc!= 'g'){ switch(opc){ case 'a': recoger_libro(libro); break; case 'b': void mostrar_libro(T_libreria); break; case 'c': break; case'd': break; case 'e': break; case 'f': break; case 'g': break; } } getch(); } /* Funcion (nombre) */ /******************************************************** **NOMBRE DE LA FUNCION: Menu ** **DESCRIPCIO: Nos muestra el menú principal. ** **PUNTERO ENTRADA: ** **PUNTERO DE SALIDA: Ninguno, solo muestra pantalla. ** **SALIDA POR PANTALLA: Menu principal. ** *********************************************************/ void menu(void) { printf("a. A%cadir un nuevo libro.\n", 164); printf("b. Listar todos los libros.\n"); printf("c. Listar la informaci%cn de un libro.\n", 162); printf("d. Prestar un libro.\n"); printf("e. Devolver un libro.\n"); printf("f. Borrar un libro.\n"); printf("g. Salir de la aplicaci%cn\n\n", 162); } /******************************************************** **NOMBRE DE LA FUNCIÓN: recoger_libro ** **DESCRIPCIÓN: Añade libros (opción 1 del menú) ** **PUNTERO ENTRADA: T_libreria ** **PUNTERO DE SALIDA: libro ** **SALIDA POR PANTALLA: Nada, solo recoje datos. ** *********************************************************/ void recoger_libro(T_libreria libro[]) { int n, i; printf("Libros a introducir? "); scanf("%d", &n); for(i=0;i<n;i++){ printf("Titulo del libro: "); gets(libro.titulo); printf("Autor del libro: "); gets(libro.autor); printf("A%co de publicaci%cn: ", 164, 162); scanf("%d", &(libro.fecha_publicacion.anno)); printf("Mes de publicaci%cn: ", 162); scanf("%d", &(libro.fecha_publicacion.mes)); printf("Datos guardados."); system("cls"); } } /************************************************************* **NOMBRE DE LA FUNCIÓN: mostrar_libro ** **DESCRIPCIÓN: Muestra todos los libros (opción 2 del menú) ** **PUNTERO ENTRADA: T_libreria ** **PUNTERO DE SALIDA: libro[] ** **SALIDA POR PANTALLA: Todos los libros recogidos. ** **************************************************************/ void mostrar_libro(T_libreria libro[]) { int i, n; for(i=0;i<n;i++){ printf("Titulo de libro: %s", libro.titulo); printf("Autor del libro: %s", libro.autor); printf("Mes de publicaci%cn: %s", 162, libro.fecha_publicacion.mes); printf("A%co publicaci%cn: %s", 164, 162, libro.fecha_publicacion.anno); } } /************************************************************* **NOMBRE DE LA FUNCIÓN: listar_libro ** **DESCRIPCIÓN: Muestra el libro buscado (opción 3 del menú) ** **PUNTERO ENTRADA: T_libreria ** **PUNTERO DE SALIDA: libro[] ** **SALIDA POR PANTALLA: Libro listado en formato caracter. ** **************************************************************/ void listar_libro (T_libreria libro[]) { }
Me faltan algunas funciones, pero dado q no me funcionan las mas simples, no he seguido creandolas, hasta que no las resolviese, pero no veo el fallo.
|
|
|
En línea
|
|
|
|
-- KiLiaN --
Desconectado
Mensajes: 1.163
Ju Já!!
|
Utiliza "insertar codigo" para meter el codigo, se ve mejor.
|
|
|
En línea
|
|
|
|
ivangc44
Desconectado
Mensajes: 8
|
/* Inclusion de librerias */ #include <stdio.h> #include <conio.h> #include <stdlib.h> /* Definicion de constantes */ #define MAX_TITULO 35 #define MAX_AUTOR 20 #define MAX_LIBRO 10 /* Definicion de tipos creados por el programador */ struct fecha{ int anno; int mes; }; typedef struct fecha T_fecha; struct libreria { T_fecha fecha_publicacion; char titulo[MAX_TITULO]; char autor[MAX_AUTOR]; }; typedef struct libreria T_libreria; /* Prototipos de funcion */ void menu(void); void recoger_libro(T_libreria libro[]); void mostrar_libro(T_libreria libro[]); main(){ T_libreria libro[MAX_LIBRO]; char opc; int n, i; printf("***********************************************************\n"); printf("***********************************************************\n"); printf("** <<PON UN LIBRO EN TU VIDA>> **\n"); printf("***********************************************************\n"); printf("***********************************************************\n\n"); menu(); printf("Opci%cn elegida? ", 162); while(opc == 'a' || opc == 'b' && opc != 'c' && opc != 'd' && opc != 'e' && opc!= 'f' && opc!= 'g'){ switch(opc){ case 'a': recoger_libro(libro); break; case 'b': void mostrar_libro(T_libreria); break; case 'c': break; case'd': break; case 'e': break; case 'f': break; case 'g': break; } } } /* Funcion (nombre) */ /******************************************************** **NOMBRE DE LA FUNCION: Menu ** **DESCRIPCIO: Nos muestra el menú principal. ** **PUNTERO ENTRADA: ** **PUNTERO DE SALIDA: Ninguno, solo muestra pantalla. ** **SALIDA POR PANTALLA: Menu principal. ** *********************************************************/ void menu(void) { printf("a. A%cadir un nuevo libro.\n", 164); printf("b. Listar todos los libros.\n"); printf("c. Listar la informaci%cn de un libro.\n", 162); printf("d. Prestar un libro.\n"); printf("e. Devolver un libro.\n"); printf("f. Borrar un libro.\n"); printf("g. Salir de la aplicaci%cn\n\n", 162); } /******************************************************** **NOMBRE DE LA FUNCIÓN: recoger_libro ** **DESCRIPCIÓN: Añade libros (opción 1 del menú) ** **PUNTERO ENTRADA: T_libreria ** **PUNTERO DE SALIDA: libro ** **SALIDA POR PANTALLA: Nada, solo recoje datos. ** *********************************************************/ void recoger_libro(T_libreria libro[]) { int n, i; printf("Libros a introducir? "); for(i=0;i<n;i++){ printf("A%co de publicaci%cn: ", 164, 162); scanf("%d", &(libro. fecha_publicacion. anno)); printf("Mes de publicaci%cn: ", 162); scanf("%d", &(libro. fecha_publicacion. mes)); } } /************************************************************* **NOMBRE DE LA FUNCIÓN: mostrar_libro ** **DESCRIPCIÓN: Muestra todos los libros (opción 2 del menú) ** **PUNTERO ENTRADA: T_libreria ** **PUNTERO DE SALIDA: libro[] ** **SALIDA POR PANTALLA: Todos los libros recogidos. ** **************************************************************/ void mostrar_libro(T_libreria libro[]) { int i, n; for(i=0;i<n;i++){ printf("Titulo de libro: %s", libro. titulo); printf("Autor del libro: %s", libro. autor); printf("Mes de publicaci%cn: %s", 162, libro. fecha_publicacion. mes); printf("A%co publicaci%cn: %s", 164, 162, libro. fecha_publicacion. anno); } } /************************************************************* **NOMBRE DE LA FUNCIÓN: listar_libro ** **DESCRIPCIÓN: Muestra el libro buscado (opción 3 del menú) ** **PUNTERO ENTRADA: T_libreria ** **PUNTERO DE SALIDA: libro[] ** **SALIDA POR PANTALLA: Libro listado en formato caracter. ** **************************************************************/ void listar_libro (T_libreria libro[]) { } http://foro.elhacker.net/programacion_cc/ayuda_con_un_programa_en_c-t349077.0.html#ixzz1i7pZ9cvZ
|
|
|
En línea
|
|
|
|
Gallu
Desconectado
Mensajes: 247
|
No se si te has dado cuenta de que en recoger libro estás recibiendo un array de libros , no un solo libro , usa "[ ]" para referirte a la posición del que estás guardando la información , no te da errores el compilador ? te sucede lo mismo cuando intentas mostrar los libros guardados.
Otro consejo sería que evites el uso de conio y de llamadas al sistema (" system("cls");") .
Saludos
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
ivangc44
Desconectado
Mensajes: 8
|
Y como se haria eso??? Podria explicarmelo?? Es q no ando en c muy bien, y pal colmo me han mandao ese proyecto, asi q....imaginense....
|
|
|
En línea
|
|
|
|
_niu
Desconectado
Mensajes: 34
|
La onda, segun me parece....
Cuando pedis libros recibis un T_Libreria [], en otras palabras un puntero, osea un T_Libreria *. Siguendo con tu definicion de void recoger_libro(T_libreria libro[]);
necesitas primero comprobar que el tipo no te quiera entras mas libros que MAX_LIBRO por que te puede dar segmentation fault. Luego en el bucle libro.facha = algo. Te compilo?? por que no podes hacer libro.fecha. porque libro es un puntero. mientras que libro, es el elemnto i del array de libros.
Espero haberte ayudado
|
|
|
En línea
|
|
|
|
Gallu
Desconectado
Mensajes: 247
|
Fíjate en como uso el argumento pasado a la función (el array). La clave es usar el índice(variable i) para acceder a los miembros del array. /* Inclusion de librerias */ #include <stdio.h> #include <stdlib.h> /* Definicion de constantes */ #define MAX_TITULO 35 #define MAX_AUTOR 20 #define MAX_LIBRO 10 #define LIMPIA_BUFFER while(getchar()!='\n') /* Definicion de tipos creados por el programador */ struct fecha{ int anno; int mes; }; typedef struct fecha T_fecha; struct libreria { T_fecha fecha_publicacion; char titulo[MAX_TITULO]; char autor[MAX_AUTOR]; }; typedef struct libreria T_libreria; /* Prototipos de funcion */ void menu(void); void recoger_libro(T_libreria libro[]); void mostrar_libro(T_libreria libro[]); int main(){ T_libreria libro[MAX_LIBRO]; recoger_libro(libro); } void recoger_libro(T_libreria libro[]) { int n, i; printf("Libros a introducir? "); LIMPIA_BUFFER; for(i=0 ; i<n ; i++){ } printf("Títulos incluidos. Pulse una tecla para continuar..."); // con esto limpiamos la consola //nos posicionamos al principio printf("Los libros incluidos son: \n"); for(i=0 ; i < n ; i++){ printf("%s \n" , libro [i ]. titulo); } }
saludos.
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
ivangc44
Desconectado
Mensajes: 8
|
joer, que razon teneis, se me a pasado. Muchisimas gracias!!!!!!
|
|
|
En línea
|
|
|
|
|
|