Вывод - это вывод из программы в поток (cout), ввод - это ввод из потока в программу (cin), это можно понять по названиям.
Один из вариантов - считывать не чисто, а строку, а затем уже преобразовать строку в чисто другими функциями.
Или можно воспользоваться интерфейсом обработки ошибок потоков:
#include <iostream>
#include <limits>
int main() {
int num = 0;
while(num != -1) {
std::cout << "Enter the number to push: ";
std::cin >> num;
if(std::cin.fail()){
std::cout << "It is not number" << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<int>::max(), '\n');
} else{
std::cout << "num = " << num << std::endl;
}
}
return 0;
}