Supongo que lo que queres lograr con ese scanf es chequear si hubo alguna falla en la lectura (situación en la cual scanf devuelve EOF), pero por otro lado también deberías chequear si devuelve 0 (en el caso que el dato recibido no concuerde con el formato esperado).
Lo ideal seria revisar el porque se da la supuesta falla y comenzar nuevamente, pero como en el ejemplo que pusiste eso no se realiza, lo equivalente estricto seria algo como:
do
{
cin>>a;
}while(!cin.fail());
Para enterarte un poco mas sobre los flags que chequea ::fail, lee
esto. Y también podes buscar sobre
excepcionespero a que es equivalente p´s!!!!!
Mejora un poco la forma de pedir las cosas, ya sabes que nadie nos paga por ayudar, mas bien cada uno lo hace porque quiere hacerlo, así que un "por favor" sumado a una cuota extra de paciencia te van a venir bien. Ok?
Saludos