Hola
Tengo un programa en el cual tengo que crear un nuevo tipo de dato struct en el cual voy a tener 3 variables, una que es el documento de la persona, la otra es el nombre de la persona y por ultimo la nacionalidad de la persona.
Al principio lo que tengo que hacer es cargar manualmente el nuevo tipo de dato, la carga va a finalizar cuando el documento sea igual a 0.
Luego va a pasar todo lo cargado a un archivo txt. (Hasta aca, va perfecto todo )
El problema surge cuando tengo que leer el archivo e imprimir el contenido . Lo que sucede es que cuando pongo while(!feof(fd)) la lectura del archivo no termina nunca, siempre me arroja los mismos valores, nunca termina el ciclo y ademas nunca me carga la nacionalidad.
El archivo se va a cargar de la siguiente manera.
38747443,Agustin,Argentina
Es decir que en cada linea del archivo txt voy a tener ese tipo de secuencia.
Este es el codigo que hice
La funcion que funciona mal es IMPRESION y no le veo defecto alguno.
Tengo un programa en el cual tengo que crear un nuevo tipo de dato struct en el cual voy a tener 3 variables, una que es el documento de la persona, la otra es el nombre de la persona y por ultimo la nacionalidad de la persona.
Al principio lo que tengo que hacer es cargar manualmente el nuevo tipo de dato, la carga va a finalizar cuando el documento sea igual a 0.
Luego va a pasar todo lo cargado a un archivo txt. (Hasta aca, va perfecto todo )
El problema surge cuando tengo que leer el archivo e imprimir el contenido . Lo que sucede es que cuando pongo while(!feof(fd)) la lectura del archivo no termina nunca, siempre me arroja los mismos valores, nunca termina el ciclo y ademas nunca me carga la nacionalidad.
El archivo se va a cargar de la siguiente manera.
38747443,Agustin,Argentina
Es decir que en cada linea del archivo txt voy a tener ese tipo de secuencia.
Este es el codigo que hice
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 5
struct s_datos
{
int doc;
char nombre[50];
char pais[50];
};
typedef struct s_datos dato;
int CARGA(dato charge[N]);
void CREACION(dato charge[N],int);
void IMPRESION();
int main()
{
int i=0,j=0;
dato charge[N];
i=CARGA(charge); /// i es la cantidad de personas que tengo.
printf("\nEl valor de i es %d",i);
for (j=0;j<i;j++)
{
printf("\n%d",charge[j].doc);
printf("\n%s",charge[j].nombre);
printf("\n%s",charge[j].pais);
}
CREACION(charge,i); ///Llamo a la funcion para crear un txt y le paso el nuevo dato struct y la cantidad de personas ingreadas.
printf("\n");
IMPRESION();
return 0;
}
int CARGA(dato charge[N])
{
int i=0,j=0,e=0;
char letra='a';
charge[i].doc=4;
while (i<N)
{
printf("\nIngrese el numero de documento: ");
scanf("%d",&charge[i].doc);
if (charge[i].doc!=0)
{
printf("\nIngrese el nombre: ");
while(letra!='\r')
{
letra=getche();
charge[i].nombre[j]=letra;
j++;
}
charge[i].nombre[j]='\0';
j=0;
letra='a';
printf("\nIngrese el pais: ");
while(letra!='\r')
{
letra=getche();
charge[i].pais[e]=letra;
e++;
}
charge[i].pais[e]='\0';
e=0;
letra='a';
i++;
}
if(charge[i].doc==0)
{
return i;
}
}
return i;
}
void CREACION(dato charge[N],int i)
{
FILE*arch;
arch=fopen("C:\\Users\\Pablo-PC\\Desktop\\personas.txt","w");
int j=0;
while(j<i)
{
fprintf(arch,"%d,%s,%s\n",charge[j].doc,charge[j].nombre,charge[j].pais);
j++;
}
fclose(arch);
}
void IMPRESION()
{
FILE*fd;
int doc,i=0;
char nombre[50]={0},pais[50]={0};
fd=fopen("C:\\Users\\Pablo-PC\\Desktop\\personas.txt","r");
printf("Documento\tNombre\tPais\n");
fscanf(fd,"%d,%s,%s\n",&doc,&nombre,&pais);
while(!feof(fd) && i<4)
{
printf("%d\t%s\t%s\n",doc,nombre,pais);
fscanf(fd,"%d,%s,%s\n",&doc,&nombre,&pais);
i++;
}
fclose(fd);
}
La funcion que funciona mal es IMPRESION y no le veo defecto alguno.