Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con estructura y ficheros

Estas en el tema de Problema con estructura y ficheros en el foro de C/C++ en Foros del Web. Buenas, 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 ...
  #1 (permalink)  
Antiguo 18/06/2014, 03:31
Banshi
Invitado
 
Mensajes: n/a
Puntos:
Problema con estructura y ficheros

Buenas,
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:
#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;
}
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

Última edición por Banshi; 18/06/2014 a las 05:38
  #2 (permalink)  
Antiguo 21/06/2014, 22:42
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 71
Respuesta: Problema con estructura y ficheros

fflush(stdin) es para liberar el buffer de lectura
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%

Etiquetas: estructura, ficheros, funcion, int, string, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:19.