¿Como pasar los datos de un archivo a una estructura ?

Iniciado por maicol_962016, 13 Marzo 2016, 04:06 AM

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

maicol_962016

//estuve intentando pero no logre que funcionara me podrían ayudar en como pasar los datos que se encuentren en un archivo a una estructura aqui esta lo que intente

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
typedef struct{
   char nombre[100];
   char apellido[100];
}datos;
int main(){
   FILE *fichero=fopen("archivo.txt","r");
   datos dat;
   int lugar=0,con=0,posicion=0,repartidor=1;
   char *cad;
   
   while(!feof(fichero)){
      fgetc(fichero);
      con++;
   }
   cad=(char*)malloc(con);
   fseek(fichero,0,SEEK_SET);
   fgets(cad,con,fichero);
   printf("archivo leido  ");
   fclose(fichero);

while(cad[posicion]!= '/')
   {
      if(cad[posicion]!=32)
      {
           switch(repartidor)
          {
                case 1:
                 dat.nombre[lugar]=cad[posicion];
                 printf("%c",dat.nombre[lugar]);//aqui yo imprimo lo que supuestamente se esta almacenando para comprobar si almacena
                  break;
                case 2:
                 dat.apellido[lugar]=cad[posicion];
                 printf("%c",dat.apellido[lugar]);//aqui yo imprimo lo que supuestamente se esta almacenando para comprobar si almacena
                 break;
              }
      }*/
      for(int i=0;i<5;i++){
         dat.nombre='a'+i;
      }
      
      else
      {
          lugar=0;
          repartidor++;
      }
      posicion++;
      lugar++;
      
      
   }
   
   printf("\n");
    printf("%s\n",dat.nombre);//aqui lo vuelvo a imprimir y me imprime basura
   printf("%s\n",dat.apellido);
   return 0;
   }

class_OpenGL

El código directamente no compilaría. Primero, hay un 'else' que no está acompañado de su if, además, has cerrado los comentarios de múltiples líneas sin abrirlo.

Sinceramente, no sé si has analizado tu propio código.
Código (cpp) [Seleccionar]
for(int i=0;i<5;i++) {
        dat.nombre='a'+i;
}


En esa parte del código estás cambiando la dirección de memoria a la que apunta dat.nombre. Eso hace inválido lo que hayas almacenado en la cadena dat.nombre.

Para hacer lo que quieres hacer es mejor usar fscanf, puesto que esta función te detecta los espacios por ti.

Siento decirte esto, pero el código es un poquito desastre. Analízalo para intentar buscar una solución mejor a lo que quieres hacer.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

maicol_962016

#2
si ese for no esta correcto lo puse como comentario y se me olvido de quitarlo de ahi lo demas si va.
en si lo que quiero hacer es pasar el contenido del fichero a una estructura llamada
datos .

class_OpenGL

Lo único que tendrías que hacer es añadir un carácter de fin de cadena a las cadenas del nombre y del apellido. Por ejemplo, tenemos siguiente cadena:

Código (cpp) [Seleccionar]
char cadena[4] = {'H', 'o', 'l', 'a'};

En esta cadena no hay un carácter que delimite su fin (te invito a que pienses en lo contrario, pero ya te digo que no hay nada que indique el final de la cadena en el programa). Para ponerle un fin a esa cadena, tienes que añadir el carácter nulo donde sea el final de la cadena:

Código (cpp) [Seleccionar]
char cadena[5] = {'H', 'o', 'l', 'a', '\0'};

Como ves, ahora la cadena es una unidad más larga porque tiene un carácter que la delimita. Ese carácter, llamado carácter nulo, se escribe como has visto ( '\0' ). Equivale a un entero 0.

PISTA: ¡¡¡Puedes añadir el carácter nulo en el 'else'!!!

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL