Lo primero, deberías separar la lógica de la pila de la entrada de datos (me refiero a que no pidas datos dentro de la función de apilar, por ejemplo).
Mírate este ejemplo que explica como hacerlo de manera separada:
http://es.kioskea.net/faq/2885-las-pilas-en-lenguaje-c