Tempo fa avevo pensato un po' a come fare, ma non ricordo la soluzione che avevo scelto. A pensarci un po' sbrigativamente, e contando che non tocco il C++ da un po', ho tirato fuori questo:
Codice:
#include <iostream>
#include <string>
using namespace std;
int read_int_from_console()
{
READ:
string in;
cin >> in;
try
{
return stoi(in); // stoi converte una string ad int; se non riesce, lancia eccezione
}
catch (exception ex)
{
cout << "string " << in << " couldn't be cast to int!!" << endl << endl;
goto READ;
}
}
int main()
{
cout << "Enter an integer number." << endl;
int n = read_int_from_console();
cout << "You entered: " << n << endl << endl;
return 0;
}
Premesso che ti serve un compilatore abbastanza aggiornato (gcc 4.7 o pių nuovo, mingw 4.7 o pių nuovo, Visual Studio 2012 o pių nuovo) per poter usare la funzione stoi, l'idea č leggere una stringa e tentare la conversione ad intero, intercettando le eccezioni che farebbero partire il loop.
Problema: se scrivi 12asdas in console, ti viene restituito 12 anzichč dare errore. Soluzione: pensaci tu, questa risposta č solo un suggerimento sulla strada da percorrere