[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