В вашем случае программа не может отличить был ли введен следующий символ после того, как пользователь прочел предупреждение о неправильном вводе, или он был введен заранее (например если вы хотите вводить данные одной строкой).
Проще всего было бы просто игнорировать все, что не является + - / * при вводе оператора и не выдавать предупреждений.
Другая метода - ввести переменную о факте выдачи предупреждения и не выводить тоже самое предупреждение если эта переменная уже его запечатлела, а успешного ввода не было. bool sucs = false;
switch (op)
{
case '+':
sucs = false; ... //при успешном вводе обнуляем переменную
case '-':
sucs = false; ... //тоже для всех успешных операторов
...
default:
if (!sucs) cout