No se eliminan nodos

Iniciado por BJM, 21 Enero 2013, 15:58 PM

0 Miembros y 1 Visitante están viendo este tema.

BJM

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:

#include <stdlib.h>
#include <stdio.h>

typedef struct{
        char marca[15];
        int año;
        }tipocarro;
       
typedef struct estrunodo {
   tipocarro datos;
   struct estrunodo *siguiente;
} tipoNodo;

typedef tipoNodo *apunpila;
typedef tipoNodo *apunnodo;

void push(apunpila *tope,tipocarro b);
void pop(apunpila *tope,tipocarro *b);

main() {
   tipocarro carro;
   int i,cont=0,num;
   apunpila pila = NULL;
   
   while(cont<5){
   printf("\n Marca: ");
   scanf("%s",carro.marca);   
    printf("\n Año: ");
   scanf("%d",&carro.año);
   push(&pila,carro);
   cont++;
     }

printf("\n\n Carros a eliminar: ");
scanf("%d",&num);

   
   for(i=1;i<=num;i++){
      if (pila==NULL)
       printf("\n No hay carros");
       
      else{
       pop(&pila,&carro);
       printf("\n %s de %s\n",carro.marca,carro.año);
      }
   }                       
   printf("\n\n");
   system("pause");
   
}

void push(apunpila *tope,tipocarro b){
   apunnodo p;
   p = (apunnodo)malloc(sizeof(tipoNodo));
   p->datos = b;
   p->siguiente = *tope;
   *tope = p;
}

void pop(apunpila *tope,tipocarro *b){
   apunnodo p;
   p = *tope;
   *tope = p->siguiente;
   *b= p->datos;
   free(p);
}

rir3760

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|.

Un error importante se encuentra al tratar de imprimir los datos de la pila:
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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

BJM

Exactamente el error estaba en el formato de los datos especificado en printf, gracias!