[ Foro de C ]

paso de datos a listas enlazadas

22-Jun-2020 05:21
Invitado (emersounds)
0 Respuestas

Hola, espero recibir ayuda. Desde ya gracias.
Tengo el siguiente enunciado para un examen:
Considerando el archivo TXT con los registros de 648 temperaturas que se adjunta junto al enunciado, se pide construir un programa en C, usando punteros y estructuras de datos que permita cumplir con la lista de requerimientos que se indica en la sección correspondiente.
Cada línea del archivo contiene 14 valores, separados por una coma (,) que corresponden a los datos de latitud, longitud y temperaturas de enero a diciembre de ese punto. La distribución de los valores es:

Para ello , luego de abrir el archivo recorremos en un while caracter por caracter con un char aux y almacenamos en una cadena hasta que haya una coma o un salto de linea. Cuando hay uno almacenamos el numero pasando de cadena a entero y guardandolo en el nodo. Reseteamos la cadena y cuando los valores estén llenos para un nodo continuamos con otro. Para probar el código estamos trabajando con solo dos valores. El problema es que el primero de ellos no es almacenado, pero el segundo en cada nodo se almacena y se imprime bien.

adjunto el codigo

#include <stdio.h>
#include <stdlib.h>

typedef struct punto {
int latitud;
int longitud;
struct punto* next;
}*Punto;
Punto cargarDatos (Punto puntos);

int main(){
Punto puntos = NULL;
puntos = cargarDatos(puntos);
while(puntos!=NULL)
   {
    printf("Latitud: %d \tLongitud: %d\n", puntos->latitud, puntos->longitud);
   
    puntos=puntos->next;
   }
   return 0;
}

Punto cargarDatos (Punto puntos){
FILE *fp;
char aux;
char auxil[50];
auxil[0]='\0';
int i=0;
int x =1;
fp = fopen ("datos.txt", "r" );
if (fp==NULL) {
printf("Archivo no encontrado.");
return NULL;
}

while(feof(fp)==0){

aux = (fgetc(fp));
if(aux!=','&&aux!='\n'){
auxil[i]=aux;
i++;
}else
{
Punto nuevo = (Punto) malloc (sizeof(struct punto));
switch(x){
case 1:
nuevo->latitud=atoi(auxil);
x=2;
break;
case 2:
nuevo->longitud=atoi(auxil);
x=3;
break;
}
auxil[0]='\0';
i=0;
if(x==3){
               nuevo->next=puntos;
               puntos=nuevo;
               x=1;
           }
}
//nuevo->next=puntos;
//puntos=nuevo;
}
fclose(fp);
   return puntos;
}

desde ante mano gracias




Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...