Saludos
Tengo la siguiente función que se llama crearArchivoTABSIM() la cual se encuentra dentro de un ciclo en el main, y cada vez que entra al ciclo se le asigna a la funcion una cadena que se llama etiqueta(char *etiqueta).
void crearArchivoTABSIM(char *etiqueta)
{
FILE *tb;
ETIQ *p = NULL;
if((strcmp(etiqueta,"null")) != 0)
{
crearListaEtiquetas(&p,etiqueta);
imprimirEtiquetas(p);
if((tb = fopen("TABSIM.txt","a+")) != NULL)
{
fwrite(etiqueta,strlen(etiqueta),1,tb);
fwrite("\n",1,1,tb);
}
}
}
y dentro de la función crearArchivoTABSIM() se encuentra la función crearListaEtiquetas() que me va a crear una lista simplemente ligada que tiene un campo char *etiqueta,y que cada vez que le envie una etiqueta me la va a insertar al principio, y después de esta esta la función imprimirEtiquetas() que me va a ir imprimiendo las etiquetas
void crearListaEtiquetas(ETIQ **p,char *etiqueta)
{
ETIQ *nuevo;
nuevo = crearEtiqueta(etiqueta);
nuevo->sig = *p;
*p = nuevo;
}
ETIQ *crearEtiqueta(char *etiqueta)
{
ETIQ *x;
int lon;
lon = strlen(etiqueta);
x = malloc(sizeof(ETIQ));
x->Etiqueta = malloc((lon+1)*sizeof(char));
strcpy(x->Etiqueta,etiqueta);
return x;
}
void imprimirEtiquetas(ETIQ *p)
{
ETIQ *ptr;
for(ptr = p;ptr!=NULL;ptr = ptr->sig)
printf("[%s]\n",ptr->Etiqueta);
}
como por ejemplo:
Si le mando las etiquetas ET1, ET2,ET3,ET4
deberia imprimir
1) ET1
2)ET1 ET2
3)ET1 ET2 ET3
4)ET1 ET2 ET3 ET4
pero el problema que tengo es que solo me esta imprimiendo el primer nodo, o sea a donde apunte la cabeza de lista y no se que estoy haciendo mal, previamente ya habia hecho listas ligadas y no me habian dado ningun problema
de antemano gracias
Cita de: m@o_614 en 1 Mayo 2014, 21:35 PMTengo la siguiente función que se llama crearArchivoTABSIM() la cual se encuentra dentro de un ciclo en el main, y cada vez que entra al ciclo se le asigna a la funcion una cadena que se llama etiqueta(char *etiqueta).
Problemas con la función "crearArchivoTABSIM" hay varios:
* No cierras el archivo.
* Solo abres el archivo para agregar una linea de texto al final de el, en ese caso ábrelo en el modo "a" y ya que se trata de modo texto se pueden sustituir las dos llamadas a fwrite por una sola a fprintf:
fprintf(tb, "%s\n", etiqueta);
* No liberas la memoria reservada para la lista.
Cita de: m@o_614 en 1 Mayo 2014, 21:35 PMSi le mando las etiquetas ET1, ET2,ET3,ET4
deberia imprimir
1) ET1
2)ET1 ET2
3)ET1 ET2 ET3
4)ET1 ET2 ET3 ET4
pero el problema que tengo es que solo me esta imprimiendo el primer nodo
Completamente normal ya que:
1) La función "crearListaEtiquetas" tiene un nombre errado: no crea etiquetas, crea
solo una.
2) Las variables declaradas en una función se destruyen al terminar esta, para preservar sus valores estos se deben comunicar a la función llamante (main en tu caso en relación a "crearArchivoTABSIM") mediante parámetros de salida o su valor de retorno, como no utilizas ninguno el resultado es: cuando termina la función "crearArchivoTABSIM" la lista (con un solo nodo) se pierde.
Un saludo