[C con Clase] Pasar datos de un archivo a un vector
Steven Davidson
srd4121 en njit.edu
Vie Mar 20 03:56:18 CET 2009
Hola Pablo,
Pablo Brunet wrote:
> sigo con problemas :(, ahora no me muestra nada, solo presione una
> tecla para continuar..., el archivo posee 2 registros en este orden:
>
> TUCUMAN JUAN 31
> SALTA PABLO 29
>
> # include <stdio.h>
> # include <stdlib.h>
> # include <iostream>
>
> using namespace std;
>
>
> typedef struct p {
> char nombre[20];
> int edad;
> char provincia[30];};
>
> FILE * m;
> int i=0;
> p v[100];
>
> int main()
> {
> m=fopen("pablo.txt","rb");
Esto es un problema, porque indicas que el fichero está en modo binario,
cuando se trata de un fichero en modo texto. Elimina la letra 'b' de la
segunda cadena.
> fseek(m,0,0);
> fread(&v,sizeof(v),1,m);
Como cada registro tiene diferentes tipos: cadenas y enteros, entonces
no deberías leer toda la información de golpe. Tienes que procesar cada
línea de texto en el fichero. En la práctica, usa 'fscanf()'.
Básicamente, estás leyendo y convirtiendo, si hace falta, las cadenas de
caracteres al tipo que quieres. Esto es prácticamente leer la
información desde el teclado con 'scanf()', pero en su lugar lo hacemos
desde un fichero.
Nota: La verdad es que la implementación de 'scanf()' invoca 'fscanf()'.
> i=1;
> while (!feof(m)){
> cout<<endl<<" "<<v[i].provincia<<" "<<v[i].nombre<<"
> "<<v[i].edad<<endl;
> fread(&v[i],sizeof(v[1]),1,m);
Aquí haríamos lo mismo.
> i++;}
> fclose(m);
>
> system("PAUSE");
> }
>
Espero que esto te ayude
Steven
Más información sobre la lista de distribución Cconclase