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.
Código:
#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