Título: Problema con función en c
Publicado por: Gigasnike95 en 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
Título: Re: Problema con función en c
Publicado por: ivancea96 en 14 Diciembre 2014, 12:32 pm
fscanf(pf,"%d",&(*maxtam)); & == dirección * == valor de la dirección &*var == var Sólo te comento eso xD Di más datos sobre el error que te da. ¿Código de error?
|