Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Gigasnike95

#1
Programación C/C++ / Problema con función en c
13 Diciembre 2014, 21:21 PM
Se trata de un programa básico para gestionar una biblioteca que tiene 4 opciones:

1-Insertar libros:
introduce los libros al programa
2-Mostrar libros:
muestra los datos introducidos anteriormente
3-Guardar libros:
Los guarda en el archivo Libros.txt
4-Leerlibros:
Elimina los datos introducidos por el usuario y restablece los que habíamos guardado anteriormente en el fichero Libros.txt.

Las tres primeras funcionan a la perfección,pero tengo un error en tiempo de ejecución cuando selecciono la cuarta.


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

typedef struct Libros{
char titulo[100];
int codigo;
char isbn[50];
char autor[100];
float precio;}Tlibro;

int menu(void);
void Insertarlibros(Tlibro *vec,int *pos);
void Mostrarlibros(Tlibro *vec,int pos);
void Guardarlibros(Tlibro *vec,int pos,int maxtam);
void Leerlibros(Tlibro **vec,int *pos,int *maxtam);


int main(){
Tlibro * Biblioteca;
int maxtam;
int opcion;
int pos=0;;

printf("¿Cuantos libros va a almacenar en la biblioteca?\n");
scanf("%d",&maxtam);
system("cls");
Biblioteca=(Tlibro * )malloc(sizeof(Tlibro)*maxtam);


do{
opcion=menu();             
switch(opcion){
case 1:
Insertarlibros(Biblioteca,&pos);
break;

case 2:
Mostrarlibros(Biblioteca,pos);                 
break;

case 3:
Guardarlibros(Biblioteca,pos,maxtam);
break;

case 4:
Leerlibros(&Biblioteca,&pos,&maxtam);
break;

default:
printf("opcion incorrecta \n");
system("cls");             
}             
             
}while(opcion!=5);   
   
free(Biblioteca);   
system("pause");   
return 0;}

int menu(void){
int eleccion;
printf("Elija una opcion: \n\n");
printf("1-Insertar Libros \n");
printf("2-Mostrar Libros \n");
printf("3-Guardar Libros \n");
printf("4-Leer Libros desde el fichero \n");
printf("5-Salir \n");
scanf("%d",&eleccion);
system("cls");
return eleccion;}

void Insertarlibros(Tlibro *vec,int *pos){
printf("Cual es el titulo del libro %d? \n",*pos+1);
fflush(stdin);
gets(vec[*pos].titulo);
fflush(stdin);
printf("Cual es su codigo? \n");
scanf("%d",&vec[*pos].codigo);
fflush(stdin);
printf("Cual es su ISBN ? \n");
gets(vec[*pos].isbn);
fflush(stdin);
printf("Cual es su autor ?\n");
gets(vec[*pos].autor);
fflush(stdin);
printf("Cual es el precio del libro? \n");
scanf("%f",&vec[*pos].precio);
system("cls");
*pos=*pos+1;}

void Mostrarlibros(Tlibro *vec,int pos){
int i;
for(i=0;i<pos;i++){
printf("El titulo del libro %d es : %s \n",i+1,vec[i].titulo);
        printf("Su codigo es : %d \n",vec[i].codigo);
                   printf("Su ISBN es : %s \n",vec[i].isbn);
                          printf("Su autor es : %s \n",vec[i].autor);
                                 printf("Su precio es :%f euros \n",vec[i].precio);
                                                                    printf("\n\n");}
}


void Guardarlibros(Tlibro *vec,int pos,int maxtam){
     
FILE *pf;
int i;
pf=fopen("Libros.txt","w");

if(pf==NULL){
printf("Error al abrir el fichero \n");}

else{
fprintf(pf,"%d \n",maxtam);
for(i=0;i<pos;i++){     
           fprintf(pf,"%s \n",vec[i].titulo);
                      fprintf(pf,"%d \n",vec[i].codigo);
                                  fprintf(pf,"%s \n",vec[i].isbn);
                                                  fprintf(pf,"%s \n",vec[i].autor);
                                                                   fprintf(pf,"%f \n",vec[i].precio);}
}
fclose(pf);
}

void Leerlibros(Tlibro **vec,int *pos,int *maxtam){
FILE *pf;
pf=fopen("Libros.txt","r");
if(pf==NULL){
printf("Error al leer el fichero \n");}     
else{
free(*vec);
fscanf(pf,"%d",&(*maxtam));
*vec=(Tlibro*)malloc(sizeof(Tlibro)**maxtam);
*pos=0;

fscanf(pf,"%f",&(*vec[*pos]).precio);
while(!feof(pf)){
           fgets((*vec[*pos]).titulo,100,pf);
                            fscanf(pf,"%d",&(*vec[*pos]).codigo);
                                           fgets((*vec[*pos]).isbn,50,pf);
                                                        fgets((*vec[*pos]).autor,100,pf);
                                                                                      *pos++;           
                                                                                             fscanf(pf,"%f",&(*vec[*pos]).precio);}
                                                                                                 
}     
fclose(pf);}












Un saludo y gracias de antemano por responder