Ayuda con un programa en C

Iniciado por ivangc44, 31 Diciembre 2011, 13:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

ivangc44

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.

El_Java

(No estaría mal que subieras el código antes de pedir tareas, gracias)

ivangc44

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.

-- KiLiaN --

Utiliza "insertar codigo" para meter el codigo, se ve mejor.
Entren al chat de elhacker.net
    
   

@kln13

ivangc44

/* 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[])
{
}

http://foro.elhacker.net/programacion_cc/ayuda_con_un_programa_en_c-t349077.0.html#ixzz1i7pZ9cvZ

Gallu

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

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

_niu

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
std::cout<<Mi wiki personal<<"Nada es inalcanzable\n";

Gallu

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? ");
    scanf("%d", &n);
    LIMPIA_BUFFER;

    for(i=0 ; i<n ; i++){
     printf("Titulo del libro: ");
     gets(libro[i].titulo);      
     }

    printf("Títulos incluidos. Pulse una tecla para continuar...");
    getchar();
     // con esto limpiamos la consola
    fprintf(stdout, "\033[2J"); 
    //nos posicionamos al principio
    fprintf(stdout, "\033[1;1H");
       
    printf("Los libros incluidos son: \n");
    for(i=0 ; i < n ; i++){
printf("%s \n" , libro[i].titulo);
    }

}


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

joer, que razon teneis, se me a pasado. Muchisimas gracias!!!!!!