El menú es:
Citar
MENU DE OPCIONES
1. Crea Pila
2. Recorre Pila
3. Elimina Nodo
4. Inserta Nodo
0. SALIR
1. Crea Pila
2. Recorre Pila
3. Elimina Nodo
4. Inserta Nodo
0. SALIR
Y el error sale cuando elijo la opción cero 0, me sale un mensaje de error y no entiendo el porqué, tal vez hay algo que se me está escapando de las manos.
Estaré agradecido si me ayudan a encontrar el error.
Código:
Código:
#include <stdio.h>
struct Luis {
int cod;
struct Luis *punt;
};
typedef struct Luis Nodo;
Nodo *pila=NULL;
short int llave;
void menu();
Nodo *Crea_Nodo(int cod);
void Crea_Pila(Nodo **h);
void Recorre_Pila(Nodo *h);
void Elimina_Nodo(Nodo **h);
void Inserta_Nodo(Nodo **h);
int main() {
menu();
}
Nodo *Crea_Nodo(int cod) {
Nodo *aux;
aux = malloc(sizeof(Nodo));
aux->cod=cod;
aux->punt=NULL;
return aux;
}
void Crea_Pila(Nodo **h) {
Nodo *aux;
int i, n, cod;
printf("\nCreando la Pila...\n");
llave=1;
*h = NULL;
printf("\n\tIngrese la cantidad de Nodos: ");
scanf("%d", &n);
puts("");
for(i=0; i<n; i++) {
printf("\t> ");
scanf("%d", &cod);
if(*h==NULL)
*h=Crea_Nodo(cod);
else {
aux=Crea_Nodo(cod);
aux->punt=*h;
*h=aux;
}
}
if(h!=NULL) printf("\n\tLa pila ha sido creada\n");
}
void Recorre_Pila(Nodo *h) {
printf("\nRecorriendo Pila\n\n");
if(h==NULL) printf("\n!!! La pila esta vacia !!!\n");
while(h!=NULL) {
printf("\t--> %d ", h->cod);
h=h->punt;
}
puts("");
}
void Elimina_Nodo(Nodo **h) {
Nodo *aux;
char resp;
printf("\nDesea eliminar nodo?\n");
scanf("%d", &resp);
if(resp==0) return;
do{
if(*h==NULL) {
printf("\nLa pila esta vacia, no puede seguir eliminando nodos\n");
return;
}
else {
aux=(*h)->punt;
free(*h);
*h=aux;
}
printf("\nDesea seguir eliminando nodos?\n");
scanf("%d", &resp);
}while(resp);
}
void Inserta_Nodo(Nodo **h) {
int num;
Nodo *aux;
char resp;
do{
printf("\nIngrese dato a insertar a la pila: ");
scanf("%d", &num);
if(*h==NULL)
*h=Crea_Nodo(num);
else {
aux=Crea_Nodo(num);
aux->punt = *h;
*h=aux;
}
printf("\nDesea seguir insertando datos?");
scanf("%d", &resp);
}while(resp);
}
void menu() {
short int resp;
do{
printf("\n\t\t\tMENU DE OPCIONES\n");
printf( "\t\t\t----------------\n\n");
printf("\t1. Crea Pila\n");
printf("\t2. Recorre Pila\n");
printf("\t3. Elimina Nodo\n");
printf("\t4. Inserta Nodo\n");
printf("\t0. SALIR\n");
printf("\n\t Ingrese opcion ==> ");
scanf("%d", &resp);
switch(resp) {
case 1:
Crea_Pila(&pila);
break;
case 2:
if(llave==1) Recorre_Pila(pila);
else puts("\a");
break;
case 3:
if(llave==1) Elimina_Nodo(&pila);
else puts("\a");
break;
case 4:
if(llave==1) Inserta_Nodo(&pila);
else puts("\a");
break;
default:
printf("\nAdios\n");
}
}while(resp>0);
}
struct Luis {
int cod;
struct Luis *punt;
};
typedef struct Luis Nodo;
Nodo *pila=NULL;
short int llave;
void menu();
Nodo *Crea_Nodo(int cod);
void Crea_Pila(Nodo **h);
void Recorre_Pila(Nodo *h);
void Elimina_Nodo(Nodo **h);
void Inserta_Nodo(Nodo **h);
int main() {
menu();
}
Nodo *Crea_Nodo(int cod) {
Nodo *aux;
aux = malloc(sizeof(Nodo));
aux->cod=cod;
aux->punt=NULL;
return aux;
}
void Crea_Pila(Nodo **h) {
Nodo *aux;
int i, n, cod;
printf("\nCreando la Pila...\n");
llave=1;
*h = NULL;
printf("\n\tIngrese la cantidad de Nodos: ");
scanf("%d", &n);
puts("");
for(i=0; i<n; i++) {
printf("\t> ");
scanf("%d", &cod);
if(*h==NULL)
*h=Crea_Nodo(cod);
else {
aux=Crea_Nodo(cod);
aux->punt=*h;
*h=aux;
}
}
if(h!=NULL) printf("\n\tLa pila ha sido creada\n");
}
void Recorre_Pila(Nodo *h) {
printf("\nRecorriendo Pila\n\n");
if(h==NULL) printf("\n!!! La pila esta vacia !!!\n");
while(h!=NULL) {
printf("\t--> %d ", h->cod);
h=h->punt;
}
puts("");
}
void Elimina_Nodo(Nodo **h) {
Nodo *aux;
char resp;
printf("\nDesea eliminar nodo?\n");
scanf("%d", &resp);
if(resp==0) return;
do{
if(*h==NULL) {
printf("\nLa pila esta vacia, no puede seguir eliminando nodos\n");
return;
}
else {
aux=(*h)->punt;
free(*h);
*h=aux;
}
printf("\nDesea seguir eliminando nodos?\n");
scanf("%d", &resp);
}while(resp);
}
void Inserta_Nodo(Nodo **h) {
int num;
Nodo *aux;
char resp;
do{
printf("\nIngrese dato a insertar a la pila: ");
scanf("%d", &num);
if(*h==NULL)
*h=Crea_Nodo(num);
else {
aux=Crea_Nodo(num);
aux->punt = *h;
*h=aux;
}
printf("\nDesea seguir insertando datos?");
scanf("%d", &resp);
}while(resp);
}
void menu() {
short int resp;
do{
printf("\n\t\t\tMENU DE OPCIONES\n");
printf( "\t\t\t----------------\n\n");
printf("\t1. Crea Pila\n");
printf("\t2. Recorre Pila\n");
printf("\t3. Elimina Nodo\n");
printf("\t4. Inserta Nodo\n");
printf("\t0. SALIR\n");
printf("\n\t Ingrese opcion ==> ");
scanf("%d", &resp);
switch(resp) {
case 1:
Crea_Pila(&pila);
break;
case 2:
if(llave==1) Recorre_Pila(pila);
else puts("\a");
break;
case 3:
if(llave==1) Elimina_Nodo(&pila);
else puts("\a");
break;
case 4:
if(llave==1) Inserta_Nodo(&pila);
else puts("\a");
break;
default:
printf("\nAdios\n");
}
}while(resp>0);
}
Estoy sospechando que el problema está en el módulo MENU, pero no lo encuentro, lo demás veo que está bien porque lo he probado antes sin el MENU