C/Visual C - Duda con fscanf

   
Vista:

Duda con fscanf

Publicado por Irade (1 intervención) el 18/06/2009 19:32:42
Hola :) estoy haciendo una práctica en C en la que el primer paso es leer de un archivo de texto. Son 4 cosas las que hay que leer en cada linea (nombre, titulo, nº discos y fecha de entrada en la lista), por lo tanto me he creado primero estas estructuras:

typedef struct
{
int dia;
int mes;
int anyo;
}Tfecha;

typedef struct
{
char nombre[30];
char titulo[30];
int numDiscos;
Tfecha fecha;
}lista_exitos;

lista_exitos l;

y para leer los datos del fichero he hecho lo siguiente:
void leerLista(lista_exitos l)
{
int i = 0;
FILE *fichero;
fichero = fopen("radio.txt", "r+");
if(fichero != NULL)
{
while (feof(fichero) == 0)
{
fflush(stdin);
fscanf(fichero, "%s %s %d", l.nombre, l.titulo, &l.numDiscos);
printf(" ");
printf("%s %s %d", l.nombre, l.titulo, l.numDiscos);
}
}
else
{
printf(" Error ");
}
fclose(fichero);
}

(La fecha aun no la cojo porque quiero aclararme primero con esto)
El problema es que yo quiero guardar muchos nombres, titulos y numeros de discos, pero con eso solo me quedo con el último. Más adelante tendré que sacar un nombre determinado, o buscar por el número de discos...
Como hago para guardarlos y luego poder acceder a cada uno de ellos??
Había pensado algo así:
fscanf(fichero, "%s %s %d", l.nombre(i), l.titulo(i), &l.numDiscos(i));
pero no funciona.
La lista puede tener como máximo 50 entradas.

Muchas gracias :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Duda con fscanf

Publicado por Joriel (19 intervenciones) el 24/06/2009 06:37:03
Crea un arreglo de estructura enves de poner el fscanf
de esta manera
fscanf(fichero, "%s %s %d", l.nombre, l.titulo, &l.numDiscos);
ponlo asi
fscanf(fichero, "%s %s %d", l.nombre[i], l.titulo[i], &l.numDiscos[i]);
de esa manera vas a guardar los datos en un arreglo de estructuras...

Primero declara el arreglo de estructuras asi:
lista_exitos l[max]; donde max el numero maximo de elementos del arreglo.
colocas un contador dentro del while que haces para leer el archivo y listo....
Ya ahi es como si estuvieras trabajando con arreglos o arrays....

Para ayudarte un poquito te pongo el codigo:

#define max 300
lista_exitos l[max];

void leerLista(lista_exitos l)
{
int i = 0;
FILE *fichero;
fichero = fopen("radio.txt", "r+");
if(fichero != NULL)
{
while (feof(fichero) == 0)
{
//fflush(stdin); esta demas esta linea no estas leyendo el buffer de teclado si no desde archivo...
fscanf(fichero, "%s %s %d", l.nombre[i], l.titulo[i], l.numDiscos[i]);
printf(" ");
printf("%s %s %d", l.nombre[i], l.titulo[i], l.numDiscos[i]);
i++;
}
}
else
printf(" Error ");

fclose(fichero);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar