getchar не работает, потому что после "cin >> a" во входном потоке, скорее всего, остался непрочитанным '\n' (и правда, зачем его читать, если читаешь число), вызов getchar как раз его из потока и забирает (вам повезло и cin оказался синхронизован с stdin).
Вы можете проверить это, например, заменив "getchar()", на "cout << getchar()" и посмотреть код символа, который был прочитан и сравнить его с '\n'. Или, например, воткнуть перед getchar такую штуку "ws(cin)" (она съедает все пробельные символы из cin) и после этого getchar, по идее, должен работать так как вы и ожидали.
Почему getch работает в этой ситуации правильно стоит смотреть в документации к компилятору, так как getch все-таки не стандартная функция. Рискну предположить, что она ожидает именно нажатия клавиатуры (но это только догадка).