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:
y despues le aplico strtok, y la palabra captada por el puntero pointer se la envio a la funcion Insert de la cola.fgets( buffer, 100, in )
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; }