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:
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;
}