Pues tienes varias posibilidades...
Hacer tu programa de forma cíclica con un bucle while(), pon un sleep() al final para que el consumo de CPU no sea muy grande y controla la finalización del programa para evitar fallos como bucles infinitos, además ten en cuenta cómo realizas tu programa pues normalmente los programas son secuenciales y tú necesitas realizarlo de forma cíclica, es como programar un PLC (programmable logic controller) que se usa habitualmente para control de procesos en la industria.
La otra solución un poco más avanzada es usar un hilo (multiproceso) que se encargue de mirar si has pulsado una tecla mediante un evento del sistema operativo o de forma menos "bonita" haciendo que el hilo se ejecute de forma cíclica y en paralelo al proceso principal, aunque si eres capaz de lanzar hilos creo que serás capaz de atrapar eventos de tipo keyboard...
un ejemplo:
do
{
...
if(kbhit())
c=getch();
sleep(0);
}while(c!='p');
donde están los puntos suspensivos añades tu código, la función kbhit() te devuelve un 1 en caso de que se haya pulsado una tecla, en ese caso miras qué tecla se ha pulsado, y haces lo que tengas que hacer... No tengo muy claro si kbhit() es dependiente del SO... Seguro que alguno de los foreros nos puede sacar de dudas...
Un saludo.