13/12/2014, 14:20
|
|
Respuesta: Pasar datos de txt a un struct Cita:
Iniciado por lareto Creo que deberías volver a leer cómo funciona fgets()
Revisa esto:
que es probable que cada línea en el archivo mida más de 30 caracteres. Si ya me he dado cuenta y lo he corregido, ahora mismo estoy asi:
Código:
#include <stdio.h>
#include <stdlib.h>
#define TAM 50
typedef struct
{
char nombre[30];
char apellido1[30];
int dni;
char sexo;
int edad;
} Tpersona;
void cargar_txt(Tpersona []);
int main()
{
Tpersona personas[TAM];
cargar_txt(personas);
printf("Nombre %s\n",personas[0].nombre);
printf("Apellido %s\n",personas[0].apellido1);
printf("DNI %d\n",personas[0].dni);
printf("Sexo %c\n",personas[0].sexo);
printf("Edad %d\n",personas[0].edad);
printf("Nombre %s\n",personas[1].nombre);
printf("Apellido %s\n",personas[1].apellido1);
printf("DNI %d\n",personas[1].dni);
printf("Sexo %c\n",personas[1].sexo);
printf("Edad %d\n",personas[1].edad);
return 0;
}
void cargar_txt(Tpersona personas[TAM])
{
FILE *f;
Tpersona p;
char *token;
f=fopen("PERSONAS.txt","r");
if(f==NULL)
{
printf("Error de apertura\n");
}
else
{
char cad[250];
int cont=0,per=0;
fgets(cad,255,f);
while(!feof(f))
{
token = strtok(cad, ","); /*Separamos por espacios*/
while (token != NULL)
{
switch(cont)
{
case 0:
strcpy(p.nombre,token);
break;
case 1:
strcpy(p.apellido1,token);
break;
case 2:
p.dni=atoi(token);
break;
case 3:
p.sexo=token[0];
break;
case 4:
p.edad=atoi(token);
break;
}
cont++;
token = strtok(NULL,",");
}
personas[per]=p;
cont=0;
per++;
fgets(cad,255,f);
}
fclose(f);
}
}
Ya me funciona, el nombre y el apellido me funcionaban bien, pero el resto no. A la hora de crear el txt, no se el por qué al dar a tabulación entre campos, algunas veces deja espacios amplios y en otras ocasiones parecen espaicios normales. He optado por separar los campos por comas y ya se ha solucionado. Gracias.
Última edición por Banshi; 13/12/2014 a las 14:30 |