#include <iostream> using std::cin; using std::cout; using std::ios; int main() { for (;;) { int value = 0; // Interpret 0 and 0x as hexadecimal and octal prefixes. // No prefix still means "decimal" integer // For example, try // 0 0x(error) 123 -123 -0777, 0888(decimal 888) 0xA -0xA -0x(error) //cin.unsetf( ios::dec ); // Ignore octal prefix, for example, // interpret 077 as decimal 77 //cin.unsetf( ios::oct ); // All integers now expected to be octal base: //cin.unsetf( ios::dec ); //cin.setf( ios::oct ); // All integers now expected to be base-16: // Interpret 12 as hexadecimal // Interpret 0x12 as hexadecimal // Interpret 077 as hexadecimal //cin.unsetf( ios::dec ); //cin.setf( ios::hex ); if ( !( cin >> value ) ) { // cin is not good, some checks required... if ( cin.bad() ) { cout << "\t\tStream is corrupted, exiting\n"; return 1; } if ( cin.eof() ) { cout << "\t\tEOF, exiting\n"; return 0; } if ( cin.fail() ) { cin.clear(); // go back to good state... cout << "\t\tInput formatting failed, recovering...\n"; char ch = 0; while ( cin >> ch ) { if ( isdigit( ch ) ) { cin.unget(); // put the digit back break; } cout << "\t\tCharacter [" << ch << "] was ignored\n"; }//while continue; // back to reading the value } } cout << "\tvalue == " << value << ";\n"; }//for return 0; }