le pusiste "return 0" ? o solo "return"
prueba esto:
Creas un procedimiento aparte por ejemplo que se llame salida, entonces si quieres que el programa se termine llamas a salida que tiene un exit, ya que dices que si te funciona mientras no esté dentro de un bucle.
ps: tampoco estoy seguro de eso
estoy haciendo como normalmente funciona en C++