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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Hay algo que se me escapa de las manos en este código y me genera error?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Hay algo que se me escapa de las manos en este código y me genera error?  (Leído 2,109 veces)
theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
¿Hay algo que se me escapa de las manos en este código y me genera error?
« en: 27 Abril 2012, 04:38 am »

Hola a todos, resulta que estoy aprendiendo a crear pilas y a realizar las operaciones básicas como creación de pilas, recorrido, inserción de nodos y eliminación de nodos. Creo que voy bien porque todo me estaba saliendo bien. Luego, decidí implementar un menú en mi programa para poder elegir la operación que desea hacer el usuario, y fue recién que me genera problemas. El problema específicamente está en lo siguiente:

El menú es:

Citar
MENU DE OPCIONES

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);
}

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


« Última modificación: 27 Abril 2012, 04:56 am por theluigy13etv » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: ¿Hay algo que se me escapa de las manos en este código y me genera error?
« Respuesta #1 en: 27 Abril 2012, 06:06 am »

Hola! el "problema" ( si es q se puede decir problema) esta en el short int resp. No se porque razon no deja almacenar un cero  :o ... declara la variable de tipo int
Espero q alguien pueda responder mejor a esto

Saludos



En línea

Ahorrate una pregunta, lee el man
Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: ¿Hay algo que se me escapa de las manos en este código y me genera error?
« Respuesta #2 en: 27 Abril 2012, 06:21 am »

Cambia esta parte:
Código
  1. Nodo *aux;
  2. aux = malloc( sizeof( Nodo ) );
Por esto:
Código
  1. Nodo *aux;
  2. aux = ( Nodo* )malloc( sizeof( Nodo ) );

En cuanto al cero no veo por qué no debería funcionar. Escribinos el mensaje de error.
« Última modificación: 27 Abril 2012, 06:25 am por CrisQC » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
una manita porfa a este codigo (me da error)
Programación Visual Basic
cark 2 1,762 Último mensaje 27 Mayo 2007, 16:46 pm
por cark
¿Cual es el error en este código?
Programación C/C++
Draklit 5 3,600 Último mensaje 27 Mayo 2010, 16:56 pm
por Draklit
como solucionar este error/problema que genera el C#
Programación C/C++
euphemia 0 1,708 Último mensaje 15 Abril 2013, 03:02 am
por euphemia
Modificar este código a algo más complejo « 1 2 »
Electrónica
Meta 12 9,629 Último mensaje 15 Agosto 2014, 09:44 am
por Meta
¿Es este codigo un miner o algo parecido?
Seguridad
RaulMarioS 1 2,072 Último mensaje 29 Octubre 2018, 18:19 pm
por Markks
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines