Test Foro de elhacker.net SMF 2.1

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:

#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);
}
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:
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!