elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con una lista
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con una lista  (Leído 1,335 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
problema con una lista
« en: 1 Mayo 2014, 21:35 pm »

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).

Código
  1. void crearArchivoTABSIM(char *etiqueta)
  2. {
  3.    FILE *tb;
  4.    ETIQ *p = NULL;
  5.    if((strcmp(etiqueta,"null")) != 0)
  6.    {
  7.        crearListaEtiquetas(&p,etiqueta);
  8.        imprimirEtiquetas(p);
  9.        if((tb = fopen("TABSIM.txt","a+")) != NULL)
  10.        {
  11.            fwrite(etiqueta,strlen(etiqueta),1,tb);
  12.            fwrite("\n",1,1,tb);
  13.        }
  14.    }
  15. }

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


Código
  1. void crearListaEtiquetas(ETIQ **p,char *etiqueta)
  2. {
  3.    ETIQ *nuevo;
  4.    nuevo = crearEtiqueta(etiqueta);
  5.    nuevo->sig = *p;
  6.    *p = nuevo;
  7. }
  8.  
  9. ETIQ *crearEtiqueta(char *etiqueta)
  10. {
  11.    ETIQ *x;
  12.    int lon;
  13.    lon = strlen(etiqueta);
  14.    x = malloc(sizeof(ETIQ));
  15.    x->Etiqueta = malloc((lon+1)*sizeof(char));
  16.    strcpy(x->Etiqueta,etiqueta);
  17.    return x;
  18. }
  19.  
  20. void imprimirEtiquetas(ETIQ *p)
  21. {
  22.    ETIQ *ptr;
  23.    for(ptr = p;ptr!=NULL;ptr = ptr->sig)
  24.       printf("[%s]\n",ptr->Etiqueta);
  25. }
  26.  
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


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema con una lista
« Respuesta #1 en: 2 Mayo 2014, 06:11 am »

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).
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:
Código
  1. fprintf(tb, "%s\n", etiqueta);
* No liberas la memoria reservada para la lista.

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
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


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema de mostrar una lista
Java
Aeros 3 2,944 Último mensaje 10 Agosto 2010, 00:09 am
por Aeros
problema con metodo de lista
Programación C/C++
karmi 2 2,215 Último mensaje 19 Noviembre 2010, 14:31 pm
por Akai
Problema con lista enlazada
Programación C/C++
Lain0x 2 3,432 Último mensaje 8 Julio 2011, 13:20 pm
por Valkyr
problema con lista indexada
Programación C/C++
m@o_614 8 3,048 Último mensaje 8 Enero 2014, 19:11 pm
por m@o_614
Problema al ordenar lista c++.
Programación C/C++
Gaspi 6 3,742 Último mensaje 20 Febrero 2015, 22:53 pm
por Gaspi
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines