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);
}
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
Exactamente el error estaba en el formato de los datos especificado en printf, gracias!