Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/01/2014, 14:02
Avatar de cronopiomx
cronopiomx
 
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años
Puntos: 28
Pregunta Dudas en mi implementacion

Hola amigos, llevo rato buscando en mi codigo donde esta el error, les describo lo que tengo hecho y lo que me sucede.

1. Leo un fichero que contiene varias lineas, en este caso:
fichero: "testcode1.c" (no importa la extension)
dentro del fichero esta esto (2 lineas solamente):

int c, d;
float number;


2. Esas lineas las separo con strtok, las separo por espacion, coma y pto. coma.

3. Cada palabrita separada la inserto en una estructura de datos Queue (Cola), o sea cada nodo tendra dentro, [int]->[c]->[d]->[float]->[number], y asi sucesivamente.

El caso es que capturo las lineas del fichero de esta forma:
Código:
 fgets( buffer, 100, in )
y despues le aplico strtok, y la palabra captada por el puntero pointer se la envio a la funcion Insert de la cola.


Mi problema es que al iterar sobre la primera linea (int c, d;), me asigna bien la cabeza de la cola 'qhead', pero al iterarsobre la segunda linea (float number;), y al insertar en la cola, me cambia la cabeza o qhead por float y eso esta mal, deberia quedarse con la cabeza inicial, que es la inicial del fichero (int).

He mirado y el valor de qhead cambia cuando fgets lee de nuevo y asigna a la variable buffer.

Que puede suceder?

Mi Implementacion
Código:
// cola.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct token
{  
    char * token_name;
    int row;
    struct token * next;
};

struct token * qhead = NULL;
struct token * qend = NULL;

void push(char * name, int row) //inserto en la cola
{	
	struct token *temp = (struct token*)malloc(sizeof(struct token));	      
	
    temp->token_name = name;
    temp->row = row;
	
	temp->next=NULL;
	
	if(qhead==NULL)
	{
		qhead=temp;
	}
	else
	{
		qend->next = temp;
	}
	qend = temp;
}

struct token * tokensenqueue (char * Cfilename) //leo el fichero, pico, y mando a insertar
{        
    char buffer [100];
    FILE *in = fopen ( Cfilename , "r");    

    char *pointer = NULL;    
    char delimiters[]   = " ,;\t\n";
	char xx[100];
    
    int rowcount = 0;

    while ( fgets( buffer, 100, in ) )
    {		 
          rowcount++;
          
          pointer = strtok( buffer, delimiters ); 
          while( pointer != NULL )
          {
             printf("%s %d\n", pointer, rowcount );             
			 
             push( pointer, rowcount );                                       
             
             pointer = strtok( NULL, delimiters );
          }		 
    }
  return qhead;
}

int  main()
{
    tokensenqueue("testcode1.c");
    printf("\n%s\n", qhead->token_name);    
    
    return 0;
}