A ver si me podeis echar un cable con este código, necesito leer un fichero de texto con el siguiente formato:
Nombre película
Año
Recaudación
Conforme voy leyendo cada línea, tengo que ir metiendo el contenido en la variable correspondiente de un struct. Para leer uso fgets, el problema viene cuando lo que quiero almacenar no es una cadena, sino un int o float y entonces uso fscanf, pero ya no me recoge bien los valores y me hace cosas extrañas. He de decir que me tengo que limitar a lo aprendido en clase así que no puedo usar atoi,atof,strcpy, etc...solo he dado funciones de lectura y escritura. Si recorro el fichero y solo leo cadenas no tengo problemas, si solo leo los int y float tampoco, pero si mezclo fgets con fscanf(es necasario para indicar el formato de lo que recojo) es cuando me da problemas. Pongo el código a ver si me podeis echar un cable, sino hay otro forma usaré los cambios de variable con atoi, atof.Gracias.
Saludos.
El código es el siguiente:
Código:
El problema era que el fscanf deja residuo y es lo que leía acontinuación el fgets. Lo he solucionado con un fgets(f,2,cad) antes del fgets principal del bucle #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 100 typedef struct { char titulo[TAM]; int anio; float r; } Tpeli; int main() { //declaracion de variables Tpeli peliculas[TAM]; FILE *f; f=fopen("BBDD.txt","r"); int i,tamanio_array=0; if( (f==NULL)) { printf("error de apertura\n"); } else { char cad[TAM]; //fscanf(f,"%s",cad); fgets(cad,100,f); while(!feof(f)) { for(i=0; i<TAM && !feof(f); i++) { fscanf(f,"%d",&peliculas[i].titulo); fscanf(f,"%f",&peliculas[i].anio); fgets(cad,100,f); tamanio_array++; } } fclose(f); } for(i=0;i<tamanio_array;i++){ printf("Nombre película %d: %s\n",i,peliculas[i].titulo); printf("Anio: %d\n",peliculas[i].anio); printf("Recaudacin: %.2f\n",peliculas[i].r); printf("\n\n"); } return 0; }