none
A propos de cin RRS feed

  • Question

  • Bonjour  

    Le petit programme ci-dessous compile bien et fonctionne bien … tant que l’entrée n est conforme au type int (c’est-à-dire comprise entre -2147483648 et 2147483647.

    // VC++ Express 2008

    #include <iostream>

    using namespace std ;

     

    main(void)

    {

          int n ;

          while (true) {

              cin >>n ;

              if (n==0)

                  break ;

              cout <<n+100 <<endl ;

          }

          return(0);

    } 

    Si n est en dehors de ces bornes, le programme boucle en affichant l’avant dernière valeur de n. Pour obtenir l’effet recherché, je l’ai modifié ainsi :

    int main(void)

    {

          __int64 n ;

          while (true) {

              cin >>n ;n = int(n);

              if (n==0)

                  break ;

              cout <<n+100 <<endl ;

          }

          return(0);

    }

      Ce nouveau programme fonctionne bien … tant que n est entier. La valeur 2.5 par exemple produit encore une boucle infinie.

    Je comprend qu’une entrée non conforme au type attendu crée des problèmes et je m’attendais à une valeur affichée conforme au calcul modulo 2^32 dans le premier cas ou plus imprévisible dans le second. Mais cette boucle infinie me rend perplexe …

     Quelqu’un peut-il éclairer ma lanterne sur le fonctionnement de cin ?

    Merci d’avance.

     PS : Si ceci est normal, cela signifie que tout programme de saisie de données doit se faire en mode caractère. Cette conclusion est-elle correcte ?     

     

     

     

     

    jeudi 17 février 2011 10:40

Réponses