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 :

CIN et contrôle du flux de caractères


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    programmeur amateur
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : programmeur amateur

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut CIN et contrôle du flux de caractères
    Bonjour,

    je m'entraine à faire des tout petits programmes que l'on peut avoir dans le tutos et rajouter une tite fonction supplémentaire.

    typiquement, là j'ai crée un bout de prog où je récupère 3 nombres et j'en fais l'addition.
    jusque là rien de bien compliqué.
    ensuite j'ai voulu rajouté une boucle de contrôle pour vérifier que je rentre bien le on type de caractère(des nombres en l’occurrence).
    J'ai trouvé à priori la bonne fonction pour cela à savoir cin.eof (enfin j'espère) et j'essaie du coup de la coder.

    voici mon listing (pas documenté mais vu sa longueur..)

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
     
    int addition (double a, double b, double c)
    {
       double resultat;
       resultat=a+b+c;
        return resultat;
    }
     
    int trouver_number (double d)
    {
         cin>> d;
     
        if(!cin.eof())
        {
            cout<< "\n Format Error \n";
            return 0;
        }
        else
        {
            cout<< "\n Correct Input \n";
        }
     
        return d;
    }
     
    int main()
    {
       //déclaration des variables
       double nombre1 (0);
       double nombre2 (0);
       double nombre3 (0);
       double result (0);
       //Fin de déclaration
     
        // input user
        cout<<"tapez le premier chiffre";
        trouver_number(nombre1);
           cout<<"tapez le deuxième chiffre";
        trouver_number(nombre2);
        cout<<"tapez le troisième chiffre";
        trouver_number(nombre3);
     
     
        result = addition(nombre1,nombre2,nombre3);
        cout<< "nombre 1 x nombre 2 + nombre3 = " << result;
     
        return 0;
    }
    J'ai donc deux fonctions externes, une qui fais l'addition et l'autre qui récupère la frappe et qui contrôle la validité de la frappe.

    sauriez vous me dire si j'ai juste ou si c'est pas la bonne fonction?

    Cordialement

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    avant de te dire si c'est la bonne méthode, il te faut revoir les bases du langage.
    Ton programme, s'il marche, ne pourra t'afficher autre chose que 0.

    - Pourquoi dans trouver_nombre d est un double et tu retournes un int ?
    - As-tu entendu parler de portée des variables ?
    - Du passage par référence ou pointeur ?
    - Du retour de fonction ? Pourquoi en mettre un ? Comment l'utiliser ?

    Enfin, eof signifie End Of File.. ce qui n'a rien à voir avec une quelconque erreur.
    cin est un istream.
    Parmi les méthodes on remarquera cin::good qui a déjà plus de chance de correspondre.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    programmeur amateur
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : programmeur amateur

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut
    Bonjour à toi bousk,

    et bien pour commencer, je suis un grand débutant et j'essaie en me lançant de micro défi de comprendre correctement ce que j'apprend.
    j'ai en effet beaucoup de chose à voir.

    je vais donc revoir point à point ce dont tu me parles et je vais regarder.
    une fois mon code repris, je repasse dans le coin.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Hum ... #cin_verify dans la faq ?
    Ce point traitre exactement de comment s'y prendre:
    - il y a tous les tests à faire
    - comment remettre le flux d'aplomb
    - 2-3 explications
    - rien en trop ni qui manque.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    programmeur amateur
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : programmeur amateur

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut
    merci pour votre aide en effet la FAQ intégré tout ce qu'il me fallait.

    alors je vous préviens mon code n'est pas très propre mais au moins j'arrive à obtenir ce que je veux à savoir:

    main.cpp
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <iostream>
    #include <stdlib.h>
    #include "functions.h"
     
    using namespace std;
     
     
     
    int main()
    {
       //déclaration des variables
       double nombre1 (0);
       double nombre2 (0);
       double nombre3 (0);
       double result (0);
       //Fin de déclaration
     
        // input user
        cout<<"tapez le premier chiffre" <<endl;
        nombre1 = trouver_number();
           cout<<"tapez le deuxième chiffre"<<endl;
        nombre2 = trouver_number();
        cout<<"tapez le troisième chiffre"<<endl;
        nombre3 = trouver_number();
     
     
        result = addition(nombre1,nombre2,nombre3);
        cout<< "nombre 1 x nombre 2 + nombre3 = " << result;
     
        return 0;
    }
    functions.cpp
    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
    22
    23
    24
    25
    26
    #include <iostream>
    #include <limits>
    #include <stdlib.h>
     
    using namespace std;
     
    double addition (double& a, double& b, double& c)
    {
       double resultat;
       resultat=a+b+c;
        return resultat;
    }
     
    double trouver_number ()
    {
        double d (0);
     
     
     while ( ! ( cin>>d ) )
        {
            cerr << "Erreur de saisie.\n";
            cin.clear();
            cin.ignore( numeric_limits<streamsize>::max(), '\n' );
        }
        return d;
    }
    et mon header
    functions.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifndef functions_H_INCLUDED
    #define functions_H_INCLUDED
     
    double addition (double& a, double& b, double& c);
    double trouver_number ();
     
    #endif // functions_H_INCLUDED
    j'ai encore un bug de stockage de variable car si une erreur apparait et que je refais ma saisie, il oublie les anciennes saisies valides de nombre1 et autres.
    je pense que c'est le cin.ingore qui est pas parfaitement paramétré mais cela viendra plus tard.
    je dois continuer mon appretissage avant de m'aventurer dans du débuggage qui pourrait s'avérer fastidieux pour un débutant comme moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2007, 15h03
  2. Recevoir un vrai flux de caractères
    Par kenny49 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 05/03/2007, 11h41
  3. Flux istringstream -> Caractère de separation
    Par Zenol dans le forum SL & STL
    Réponses: 3
    Dernier message: 13/02/2007, 16h54
  4. [MFC] Classe SerialCom et contrôle de flux
    Par Philippe320 dans le forum MFC
    Réponses: 2
    Dernier message: 24/05/2006, 09h09

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