Проблема в том, что вы говорите пользователю вводить символ до конца
while (cin >> pow)
powers.push_back(pow);
Пока это работает, он также переводит cin
в состояние ошибки и оставляет символ в буфере.Вам нужно очистить это состояние ошибки и избавиться от символа, оставшегося во входных данных.Это можно сделать, добавив
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
после цикла while.clear
очищает ошибки, а вызов ignore избавляет от любых символов, оставшихся во входных данных.