IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Protéger la surcharge de l'opérateur >> ?


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 30
    Points
    30
    Par défaut Protéger la surcharge de l'opérateur >> ?
    Salut,

    J'ai encore une question.

    Donc j'ai ma surcharge de l'opérateur >>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::istream &operator>>( std::istream &fluxEntrant, Vecteur &vecteur )
    {
     
        std::cout << "Entrez les " << vecteur.size() << " coordonnees : ";
        for(unsigned int i=0; i<vecteur.size();i++)
            fluxEntrant >> vecteur[i];
        return fluxEntrant;
    }
    Je me demandais comment je pouvais la protéger.
    C'est à dire si l'utilisateur entre une lettre à la place d'un nombre. Idéalement il faudrait que ça se répète jusqu'à ce que l'utilisateur n'entre que des nombres.

    Comment faire ?


    Merci.

  2. #2
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Dans la FAQ
    Homer J. Simpson


  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 30
    Points
    30
    Par défaut
    J'ai un peu de mal à comprendre.
    ca veut dire que ma surcharge doit également renvoyer un bool ?

  4. #4
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Non mais tu test ton flux comme un bool.

    Regarde ce bout de code tu vas comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    int main()
    {
        int tmp = 0;
     
        std::cin >> tmp ;
        if(std::cin.fail())
        {
            std::cout << "Vous n'avez pas entré un chiffre" << std::endl;
        }
        else
        {
            std::cout << "Vous avez entré un chiffre" << std::endl;
        }
     
        _getch();
    }
    Homer J. Simpson


  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 30
    Points
    30
    Par défaut
    j'ai tenté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    std::istream &operator>>( std::istream &fluxEntrant, Vecteur &vecteur )
    {
     
        std::cout << "Entrez les " << vecteur.size() << " coordonnees : ";
        for(unsigned int i=0; i<vecteur.size();i++)
        {
            fluxEntrant >> vecteur[i];
            while ( ! ( fluxEntrant >> vecteur[i] ))
            {
                if ( fluxEntrant.fail() )
                {
                    std::cout << "Saisie incorrecte, recommencez : ";
                    fluxEntrant.clear();
                    fluxEntrant.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
                }
            }
     
        }
     
        return fluxEntrant;
    }
    Mais apparemment c'est pas bon puisque j'entre dans une boucle infini.

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    <HS>

    Citation Envoyé par Cpowa Voir le message
    Donc j'ai ma surcharge de l'opérateur >>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::istream &operator>>( std::istream &fluxEntrant, Vecteur &vecteur )
    {
     
        std::cout << "Entrez les " << vecteur.size() << " coordonnees : ";
        for(unsigned int i=0; i<vecteur.size();i++)
            fluxEntrant >> vecteur[i];
        return fluxEntrant;
    }
    Je trouve assez malvenu que l'opérateur >> affiche des données. Ce n'est pas son rôle.

    </HS>

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  2. Réponses: 8
    Dernier message: 29/08/2006, 00h56
  3. [C#] Surcharge de l'opérateur ==
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2006, 16h19
  4. Réponses: 6
    Dernier message: 12/07/2006, 15h34
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo