/* un exemple de programme C++ gérant les erreurs de saisie

   Exemple conçu pour les auditeurs du CNAM Montpellier - 1999/00
   Ph. Reitz (reitz@lirmm.fr)


   Ce programme exploite les méthodes suivantes :

   bool istream::fail() const
	=> vrai si une erreur est survenue lors d'une lecture
   void istream::sync()
	=> vide les caractères en attente

*/
#include <iostream>
using namespace std;

/* essayer ce programme dans les situations suivantes ; à chaque
   fois qu'une demande de saisie se présente, frapper (tous les cas
   de figure sont explorés - du moins, les plus classiques... -) :

   12
   1 2 3 4
   100 c
   200c
   c
   0
*/

main() {
  cout << "Test des méthodes de la classe istream pour rattraper une"
       << " erreur de saisie." << endl;
  cout << "La saisie du nombre 0 arrête le programme." << endl;
  int i;

  do {
    cout << "Saisie d'une valeur entière : ";
    cin >> i;
    
    if (cin.fail()) {
      cerr << "Erreur de saisie. Tous les caractères restants sont ignorés." << endl;
      cin.sync(); // vidage du tampon d'entrée [caractères en attente de lecture]
      cin.clear();
    } else {
      cout << "Valeur entière lue = " << i << endl;
    }
  } while (i!=0);
};