Avevo già postato un codice per controllare l'input, non è come il tuo, ci puoi solo prendere qualche spunto, non è nenche un buon esempio di programmazione, visto che c'è un goto e sono già stato bacchettato per averlo usato in questo codice, l'unica diversità che c'è da quello già postato sta nel fatto che questo gestisce anche i numeri negativi.
#include <iostream>
#include <conio.h>
using namespace std;
int InputNumerico(){
unsigned char _ascii=0;
int _cifra=0;
int _negativo=1;
unsigned int _indice=0;
int _sequenza[255]={0};
next:
do{
_ascii=getch(); // lettura tastiera
if (_ascii==27){cout<<endl; exit(0);} // esc
if (_ascii==8){ // backspace
if (_indice<1){
if (_negativo==-1) cout<<"\b \b";
_cifra=0;_negativo=1;
}
else{
_cifra=(_cifra-_sequenza[--_indice])/10;cout<<"\b \b";
}
}
if (_cifra==0 && _ascii==45){ // meno
_negativo=-1;
cout<<"-";
}
}while ((_ascii<'0' || _ascii>'9') && _ascii!=13 );
if (_ascii==13){ // invio
return _cifra * _negativo; // ritorno risultato
}
else{
_sequenza[_indice]=_ascii-'0';
_indice++;
cout<<_ascii - '0'; // visualizzazione tasto premuto
_cifra = (_cifra * 10) + (_ascii - '0'); // calcolo del risultato
goto next;
}
}
int main(){
cout << "Input numerico ";
int res = InputNumerico();
cout<<endl<<endl<<"Accettato "<<res<<endl;
return 0;
}