Non conoscevo la funzione isnan, però ho visto che prende in input un double.

Prova così (funziona solo con numeri di una cifra)

codice:
do {
cout << " a = ";
cin >> a;
} while (!(isdigit(a)));

Purtroppo non ho sottomano un compilatore e non riesco a provarla