Programación General > C++ Builder
Codigo en C se agradece colaboracion!
(1/1)
iic610:
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 ---#include <stdio.h>#include <stdlib.h>#include <string.h>#define NILL 0 struct lista_elementos { char carac[40]; struct lista_elementos *sig; struct lista_elementos *ant;};typedef struct lista_elementos nodo;int menu (void);nodo *crear (nodo *pt);nodo *buscar_palabra (nodo *lista);nodo *borrar_palabra (nodo *lista,nodo *primero);void mostrar_lista (nodo *lista);main () { nodo *lista; nodo *primero; int eleccion; do { eleccion = menu(); switch (eleccion) { case 1 : //crear la lista doblemente enlazada lista = (nodo *) malloc (sizeof(nodo)); //reserva el espacio para el primer nodo crear(lista); break; case 2 : //muestra la lista mostrar_lista(lista); break; case 3 : //borra el componente que corresponde a la palabra lista = borrar_palabra(lista,primero); break; default: //finalizar printf("Fin de las operacionesn"); } } while (eleccion != 4);} int menu(void) { int eleccion; do { printf("nMenu principaln"); printf("1. Crea la lista doblemente enlazadan"); printf("2. Muestra la listan"); printf("3. Borra el componente que corresponde a la palabra buscadan"); printf("Elija la opcionn: "); scanf("%d",&eleccion); setbuf(stdin,NULL); if (eleccion<1 || eleccion>4) { printf("n El valor introducido no se corresponde con ninguna"); printf("nde las posibilidades del menu. Intentelo de nuevo n"); } } while (eleccion<1 || eleccion>4); return(eleccion);} nodo *crear (nodo *lista) { printf("Introduce la palabra que quieres meter en la lista(para terminar FIN)n: "); setbuf(stdin,NULL); scanf("%[^n]",lista->carac); if (strcmp (lista->carac,"FIN") == 0) { lista->sig=NULL; lista->ant=NULL; } else { lista->sig=(nodo *) malloc (sizeof(nodo)); crear(lista->sig); }return(lista);} nodo *borrar_palabra (nodo *lista,nodo *primero) { primero = buscar_palabra(lista); if (primero != NULL) { if (primero->sig == NULL) { primero->ant->sig=NULL; free(primero); } else { if (primero == lista) { lista=primero->sig; free(primero); } else { primero->ant=primero->sig; free(primero); } } } else printf("No hay nada que borrarn"); return(lista);} nodo *buscar_palabra (nodo *lista) { nodo *primero; char palabra[40]; printf("Introduce la palabra que quieres que busque el programa: "); scanf("%[^n]",palabra); primero=lista; while (primero != NULL) { if (strcmp(primero->carac,palabra) != 0) { primero=primero->sig; return(NULL); } else { printf("Palabra encontradan"); return(primero); } }} void mostrar_lista (nodo *lista) { if (lista->sig != NULL) { printf("%sn",lista->carac); mostrar_lista(lista->sig); }}
Eternal Idol:
Depuralo.
Navegación
Ir a la versión completa