Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BJM en 21 Enero 2013, 15:58 pm



Título: No se eliminan nodos
Publicado por: BJM en 21 Enero 2013, 15:58 pm
El programa compila bien pero en el punto donde se ingresa la cant de carros a eliminar y se invoca a la funcion pop, aparece un cuadro de dialogo que dice: se ha producido un problema, abajo el codigo:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct{
  5.        char marca[15];
  6.        int año;
  7.        }tipocarro;
  8.  
  9. typedef struct estrunodo {
  10.   tipocarro datos;
  11.   struct estrunodo *siguiente;
  12. } tipoNodo;
  13.  
  14. typedef tipoNodo *apunpila;
  15. typedef tipoNodo *apunnodo;
  16.  
  17. void push(apunpila *tope,tipocarro b);
  18. void pop(apunpila *tope,tipocarro *b);
  19.  
  20. main() {
  21.   tipocarro carro;
  22.   int i,cont=0,num;
  23.   apunpila pila = NULL;
  24.  
  25.   while(cont<5){
  26.   printf("\n Marca: ");
  27.   scanf("%s",carro.marca);    
  28.    printf("\n Año: ");
  29.   scanf("%d",&carro.año);
  30.   push(&pila,carro);
  31.   cont++;
  32.     }
  33.  
  34. printf("\n\n Carros a eliminar: ");
  35. scanf("%d",&num);
  36.  
  37.  
  38.   for(i=1;i<=num;i++){
  39.      if (pila==NULL)
  40.       printf("\n No hay carros");
  41.  
  42.      else{
  43.       pop(&pila,&carro);
  44.       printf("\n %s de %s\n",carro.marca,carro.año);
  45.      }
  46.   }                      
  47.   printf("\n\n");
  48.   system("pause");
  49.  
  50. }
  51.  
  52. void push(apunpila *tope,tipocarro b){
  53.   apunnodo p;
  54.   p = (apunnodo)malloc(sizeof(tipoNodo));
  55.   p->datos = b;
  56.   p->siguiente = *tope;
  57.   *tope = p;
  58. }
  59.  
  60. void pop(apunpila *tope,tipocarro *b){
  61.   apunnodo p;
  62.   p = *tope;
  63.   *tope = p->siguiente;
  64.   *b= p->datos;
  65.   free(p);
  66. }
  67.  


Título: Re: No se eliminan nodos
Publicado por: rir3760 en 21 Enero 2013, 16:23 pm
Lo primero que debes hacer es cambiar la definición de la función main a "int main(void) ..." o "int main() ..." e indicar su valor de retorno con al menos "return 0;". También debes cambiar el nombre del campo "año" ya que la 'ñ' no es un carácter valido para nombres de variables y campos. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Un error importante se encuentra al tratar de imprimir los datos de la pila:
Código
  1. printf ("\n %s de %s\n", carro.marca, carro.año);
Para imprimir el campo año que es de tipo int debes utilizar el especificador de formato "%d".

Un saludo


Título: Re: No se eliminan nodos
Publicado por: BJM en 22 Enero 2013, 21:19 pm
Exactamente el error estaba en el formato de los datos especificado en printf, gracias!