Ma se tu hai dichiarato chilometri_percorsi_appoggio come int, typeof(chilometri_percorsi_appoggio) sarà sempre uguale a typeof(int). Per verificare se è stato estratto correttamente un intero devi verificare se, dopo l'estrazione, è impostato o meno il failbit dello stream. Per cui:
.codice:int chilometri_percorsi_appoggio; //... do { cout<<"Quanti chilometri percorrera' l'automobilista? : "; cin.clear(); //resetta i bit di errore cin.sync(); //svuota il buffer di lettura cin >> chilometri_percorsi_appoggio; } while(cin.fail()); //true se ci sono stati errori di estrazione