Se usi una dichiarazione int, per salvare il dato, e lo leggi con la scanf , quest'ultima se non legge un valore valido per l'int, ti restituisce lo 0 ovvero ti restituisce quante letture sono avvenute correttamente .
Occhio però che il codice di errore rappresenta quanti elementi si è letto senza errore (quindi non è sempre 0), dopo la lettura viene bloccata e quindi i valore seguenti non vengono salvati.
quindi puoi scrivere una cosa del genere :
controllo=scanf("%d",&dato);
if(controllo!=1)
errore=VERO;
da mettere in un while controllando se errore ha valore VERO o FALSO
Perchè altrimenti dovresti controllare i caratteri singolarmente e poi ricostruire il numero convertendolo.E' quello che volevi fare?