Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/12/2014, 14:20
Banshi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar datos de txt a un struct

Cita:
Iniciado por lareto Ver Mensaje
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