bhe allora in questo caso potresti sempre dichiarare un vettore di caratteri
una volta acquisito in tale vettore la tua stringa chiami una funzione che scandisce ogni elemento di tale vettore
e controlli che il suo codice ascii sia compreso tra 48 e 57 dato che in questo intervallo sono compresi i valori numerici
tutti gli altri valori corrispondono a lettere o segni grammatici
credo che conuna funzione che svolge un lavoro del genere non dovresti avere alcun problema



puoi usare la seguente funzione
che vale se vuoi inserire un numero in virgola mobile ma va bene cmq anche con un numero intero

float legginumero()
{
char buffer[100]
float valore;
int numeri=0;
int punti=0;
int altri_caratteri=0;
int valido;
int i;
do{
cin.getline(buffer,99);
for(i=0;i<strlen(buffer;i++)
{
if(buffer[i]>='0'&&buffer[i]<='9')
numeri=1;
if(buffer[i]=='.')
punti++;
if(!(buffer[i]>='0'&&buffer[i]<='9')&&buffer[i]!='.')
altricaratteri++;
}
if(numeri&&punti<=1&&!altri_caratteri)
valido=1;
else
valido=0;
if(!valido)cout<<"Valore non consentito"<<endl;
}while(!valido)


valore=atof(buffer);
return valore;
}