Consulta sobre Structs y Archivos.

Iniciado por Arturo400, 24 Septiembre 2016, 21:30 PM

0 Miembros y 1 Visitante están viendo este tema.

Arturo400

Hola

Tengo una duda. Tengo que cargar una estructura con ciertos datos y luego esos datos los tengo que pasar a un archivo txt o csv.
Esto es lo que tengo hasta ahora

#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);

int main()
{
    int i=0,j=0;
    dato charge[N];
    i=CARGA(charge);
    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);




    return 0;
}

int CARGA(dato charge[N])
{
   int i=0,j=0,e=0,k=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\\PC\\Desktop\\personas.txt","w");
    char c='4';
    int j=0;
    while(!feof(arch))
    {
        if (j<i)
        fprintf(arch,"%d",charge[j].doc);
        fputc(c,arch);
        if (c=='\n')
        j++;



    }
    fclose(arch);



}



La carga la realiza de forma perfecta. El problema es cuando tengo que pasar esos datos a un archivo.
Ya que tengo 1 int y 2 char de string.

Para el dato que es el documento no tengo ningun problema ya que utilizo la siguiente sentencia y lo guarda en el txt

fprintf(arch,"%d",charge[j].doc);

El problema es con los otros 2 datos.
Nuestro profesor nos "obliga" por asi decirlo a usar fputc, entonces si yo pongo el fputc en el ciclo, solo estaria tomando una letra y yo quiero que tome letras hasta que encuentre un \n o un \0 pero nose como aplicarlo en el codigo.