[C con Clase] Guardar y Leer Ficheros :-/
Joaquin Fernandez
joaquinfq en gmail.com
Vie Mar 30 02:45:29 CEST 2007
Hola Alan. Probé tu código y me funciona sin problemas, aunque tienes unos errores que te muestro a
continuación, pero no tienen nada que ver con el error que mencionas, de imprimir basura.
> #include <iostream>
> using namespace std;
Esto no hace falta ya que tu código no hace uso de funciones C++ tales como cout o cin. El que si
debes incluir es stdio.h para hacer uso de printf, FILE y otros.
> #define TAM 290
>
> typedef struct stDATOS
> {
> int edad; //si aca cambio a float el error aparece mas adelante
Sin problemas si cambio int a float, siempre y cuando haga los modificadores de (s)printf para float
más adelante.
> char nombre[40];
> } DATOS;
>
>
> int main()
> {
> FILE *arch;
> DATOS datosG, datosA[TAM];
>
> arch = fopen("prueba.txt", "w");
> for(int i = 0; i < TAM; i++)
> {
> datosG.edad = (int)i;
> sprintf(datosG.nombre, "Alan David Manosalva Cordova_%i", datosG.edad);
> fseek(arch, i*sizeof(DATOS), SEEK_SET);
> fwrite(&datosG, sizeof(DATOS), 1, arch);
> }
> fclose(arch);
> arch = fopen("prueba.txt", "r");
> for(i = 0; i < TAM; i++)
La variable i la definiste localmente dentro del bucle anterior, así que aquí debes definirla de
nuevo haciendo for(int i=0.... O puedes crear una variable i con ámbito en main e inicializarla a 0
en cada for como lo tienes ahora.
> {
> fseek(arch, i*sizeof(DATOS), SEEK_SET);
> fread(&datosA[i], sizeof(DATOS), 1, arch);
> }
> fclose(arch);
> for(i = 0; i < TAM; i++)
Igual que arriba.
> printf("%s - %i\n", datosA[i].nombre, datosA[i].edad);
> return 0;
> }
Saludos
Joaquín
Más información sobre la lista de distribución Cconclase