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
.