Du måste först läsa in hela raden eftersom du bara är intresserad av att användaren matar in något och sedan vill du verifiera att det man matade in var ett heltal, vid fel vill du skippa allt. Finns en standardfunktion för att läsa en hel rad som heter getline().
Finns lite olika sätt att kolla om en sträng representerar ett heltal, enklast är nog att använda en standard C funktion som heter strtol().
Så skulle kunna se ut t.ex. så här
#include <cstdlib>
#include <iostream>
using namespace std;
int read_num(istream &is, ostream &os, string prompt, string errmsg)
{
int num;
string line;
char *endptr;
for (;;) {
os << prompt;
getline(is, line);
// endptr will point to the first character that isn't a
// number, will be the character '\0' if the whole line was
// consumed
num = strtol(line.c_str(), &endptr, 10);
if (*endptr == '\0')
break;
os << errmsg << endl;
}
return num;
}
int main()
{
cout << read_num(cin,
cout,
"Mata in ett heltal: ",
"Det var inte ett heltal") << endl;
}