isdigit() controlla che un singolo carattere sia un numero.
Quindi 'a' non viene considerato un numero.
Non ho capito di che tipo hai dichiarato n, se ad esempio n vale 1234, ed è un int, viene controllato solo il primo byte.E c'è un overflow numerico, "1234" è un insieme di caratteri non un singolo carattere."1234" come stringa è diversa da 1234 come numero.
Io il tuo problema l' avrei risolto così:
codice:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv)
{
string n;
do
{
cin >> n;
// Eventualmente stampa l' errore
}while(atoi(&n[0])<2);
return 0;
}