Проблема в том, что ваш cin захватывает символ и затем терпит неудачу, что оставляет символ во входном буфере.Вам нужно проверить, сработал ли cin:
if( cin >> k) { ... }
или
cin >>k;
if(!cin.fail()) { ... }
и, если это не удалось, очистить буфер и бит сбоя:
cin.clear(); // clears the fail bit
cin.ignore(numeric_limits<streamsize>::max()); // ignore all the characters currently in the stream
РЕДАКТИРОВАТЬ: numeric_limits находится в заголовочном файле ограничений, который вы включаете, как обычно:
#include <limits>