• Sábado 14 de Diciembre de 2024, 22:49

Autor Tema:  Codigo en C se agradece colaboracion!  (Leído 979 veces)

iic610

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Codigo en C se agradece colaboracion!
« en: Miércoles 26 de Noviembre de 2008, 20:55 »
0
Se supone que mi programa mediante la utilizacion de una lisa doblemente enlazada le permite introducir al usuario palabras por teclado,mostrar la lista y borrar la palabra indicada!Ya no se si el fallo es del menu o del propio codigo del programa xo solamente me coge dos de las opciones posibles q ofrece mi menu!!Porfa necesito ayuda!Gracias!

Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define NILL 0
  5.  
  6. struct lista_elementos {
  7.     char carac[40];
  8.     struct lista_elementos *sig;
  9.     struct lista_elementos *ant;
  10. };
  11. typedef struct lista_elementos nodo;
  12. int menu (void);
  13. nodo *crear (nodo *pt);
  14. nodo *buscar_palabra (nodo *lista);
  15. nodo *borrar_palabra (nodo *lista,nodo *primero);
  16. void mostrar_lista (nodo *lista);
  17. main () {
  18.     nodo *lista;
  19.     nodo *primero;
  20.     int eleccion;
  21.     do {
  22.         eleccion = menu();
  23.         switch (eleccion) {
  24.             case 1 : //crear la lista doblemente enlazada
  25.                 lista = (nodo *) malloc (sizeof(nodo)); //reserva el espacio para el primer nodo
  26.                 crear(lista);
  27.                 break;
  28.             case 2 : //muestra la lista
  29.                 mostrar_lista(lista);
  30.                 break;
  31.             case 3 : //borra el componente que corresponde a la palabra
  32.                 lista = borrar_palabra(lista,primero);
  33.                 break;
  34.             default: //finalizar
  35.                 printf("Fin de las operacionesn");
  36.         }
  37.     } while (eleccion != 4);
  38. }
  39.  
  40. int menu(void) {
  41.     int eleccion;
  42.     do {
  43.         printf("nMenu principaln");
  44.         printf("1. Crea la lista doblemente enlazadan");
  45.         printf("2. Muestra la listan");
  46.         printf("3. Borra el componente que corresponde a la palabra buscadan");
  47.         printf("Elija la opcionn: ");
  48.         scanf("%d",&eleccion);
  49.         setbuf(stdin,NULL);
  50.         if (eleccion<1 || eleccion>4) {
  51.             printf("n El valor introducido no se corresponde con ninguna");
  52.             printf("nde las posibilidades del menu. Intentelo de nuevo n");
  53.         }
  54.     } while (eleccion<1 || eleccion>4);
  55.     return(eleccion);
  56. }
  57.  
  58. nodo *crear (nodo *lista) {
  59.     printf("Introduce la palabra que quieres meter en la lista(para terminar FIN)n: ");
  60.     setbuf(stdin,NULL);
  61.     scanf("%[^n]",lista->carac);
  62.     if (strcmp (lista->carac,"FIN") == 0) {
  63.         lista->sig=NULL;
  64.         lista->ant=NULL;
  65.     }
  66.     else {
  67.         lista->sig=(nodo *) malloc (sizeof(nodo));
  68.         crear(lista->sig);
  69.     }
  70. return(lista);
  71. }
  72.  
  73. nodo *borrar_palabra (nodo *lista,nodo *primero) {
  74.     primero = buscar_palabra(lista);
  75.     if (primero != NULL) {
  76.         if (primero->sig == NULL) {
  77.             primero->ant->sig=NULL;
  78.             free(primero);
  79.         }
  80.         else {
  81.             if (primero == lista) {
  82.                 lista=primero->sig;
  83.                 free(primero);
  84.             }
  85.             else {
  86.                 primero->ant=primero->sig;
  87.                 free(primero);
  88.             }
  89.         }
  90.     }
  91.     else
  92.         printf("No hay nada que borrarn");
  93.     return(lista);
  94. }
  95.  
  96. nodo *buscar_palabra (nodo *lista) {
  97.     nodo *primero;
  98.     char palabra[40];
  99.     printf("Introduce la palabra que quieres que busque el programa: ");
  100.     scanf("%[^n]",palabra);
  101.     primero=lista;
  102.     while (primero != NULL) {
  103.         if (strcmp(primero->carac,palabra) != 0) {
  104.             primero=primero->sig;
  105.             return(NULL);
  106.         }
  107.         else {
  108.             printf("Palabra encontradan");
  109.             return(primero);
  110.         }
  111.     }
  112. }
  113.  
  114. void mostrar_lista (nodo *lista) {
  115.     if (lista->sig != NULL) {
  116.         printf("%sn",lista->carac);
  117.         mostrar_lista(lista->sig);
  118.     }
  119. }
  120.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Codigo en C se agradece colaboracion!
« Respuesta #1 en: Miércoles 26 de Noviembre de 2008, 22:29 »
0
Depuralo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.