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 :

Programmation B Stroustrup ..


Sujet :

C++

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Programmation B Stroustrup
    Bonjour à toutes et tous .

    Je continue à réfléchir à mon problème .

    @Bousk . Merci .

    il est inutile de mettre en place toute une gestion de savoir si oui ou non un chiffre a été rentré.
    Cela semble une évidence que je ne maitrise pas encore .

    Une nouvelle version :
    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
     
    int main()
    {
        char a = 0, b = 0;
        while (a != '|' && b != '|')
        {
            cout << '\n' << " Entrez deux nombres !" << '\n';
            cin >> a >> b ;
            if ((a >= '0' && a <= '9') && (b >= '0' && b <= '9'))
     
                cout << '\n' << " Vous avez choisi : " << a <<" et "<<  b << " Merci !" << '\n';
            else
                cout << '\n' << " Erreur . Ce ne sont pas des nombres !" << endl;
     
            if (a > b) {
                cout << '\n' << "Le plus petit nombre est : " << b << "  Le plus grand est : " << a << '\n';}
                else if (a < b){
                cout << '\n' << "Le plus grand nombre est : " << b << "  Le plus petit est : " << a << '\n';}
                else if (a == b){
                cout << '\n' << "Les deux nombres sont égaux ! " << a << " et " <<  b << '\n';}
                }
    }
    Sans le "classement" tout fonctionne .
    Avec il reste des "bugs" .

    Comment séparer les blocs ?? pour que lorsque ont entre des lettres tout le contenu ne s'affiche plus .??

    Cordialement.

  2. #22
    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
    Un bloc se définit par ses accolades
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {// j'ouvre mon bloc
    // code du bloc
    }// bloc refermé
    Cela semble une évidence que je ne maitrise pas encore .
    Si demain je crée une machine qui doit me dire si oui ou non j'ai 100€ dans ma poche, est-il cohérent de définir que ma machine fonctionne si le seul test que j'ai fait est de lui présenter 100€ ?
    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. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Programmation B Stroustrup
    Merci @Bousk .

    Oui cela semble doublement évident que mon programme ne fonctionne pas ,
    mais je préfère dire qu'il fonctionne à moitié ..

    Pour les 'blocs' et les accolades c'est bien ce que j'avais compris . Mais cela apparait être dans l'absolu .

    Dans ma petite tête je pensais que délimiter un bloc "supprimais" la suite .
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     cout << '\n' << " Entrez deux nombres !" << '\n';
            cin >> a >> b ;
            if ((a >= '0' && a <= '9') && (b >= '0' && b <= '9'))
     
                cout << '\n' << " Vous avez choisi : " << a <<" et "<<  b << " Merci !" << '\n';
            else
                cout << '\n' << " Erreur . Ce ne sont pas des nombres !" << endl;
    Séparer ce bloc du suivant pour éviter la poursuite du programme .Ca ne marche pas .

    Bonjour à toutes et tous .

    Cordialement.

    PS: endl; c'est pour tester la différence ;

  4. #24
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    je ne vois pas pourquoi tu t'es écarté du problème initial. On demande deux entiers et tu prends deux char, par conséquent limité à [0...9], alors que cette limitation n'a pas lieu d'être.

    Tu peux par exemple utiliser http://www.cplusplus.com/reference/i...istream/unget/ pour résoudre ce problème, il existe peut-être d'autres solutions plus élégante. Tu as un exemple dans le lien.

    PS: endl; c'est pour tester la différence ;
    Je ne comprend pas ta remarque. std::endl est le manipulateur permettant de revenir à la ligne et de flusher (afficher) les caractères à l'écran.

    Bonne chance

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Programmation B Stroustrup
    Bonjour à toutes et tous . (Re-)

    @Trademark . Doublement , Merci . Pour ta réponse et tes encouragements.
    PS: endl; c'est pour tester la différence ;
    Oui la différence avec : '\n' .

    Pour le lien , mon anglais et ++ qu'élémentaire et la traduction googole pour unget me renvoies entre autre à un marchand de matériel de laveurs de carreau . .. le reste ressemble à du parlé ................. !(censuré).

    Mais je vais trouver .

    Cordialement.

  6. #26
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    En fait tu peux analyser l'exemple fourni dans le lien sans rien comprendre à l'anglais, mais il est vrai que ça aide. Je vais expliquer vite fait ici:

    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
    // istream::unget example
    #include <iostream>
    using namespace std;
     
    int main () {
      char c;
      int n;
      char str[256];
     
      cout << "Entrer un nombre ou un mot ";
      c = cin.get(); // On extrait le premier caractère de la console (1)
     
      if ( (c >= '0') && (c <= '9') )
      {
        cin.unget(); // On remet le caractère extrait dans le buffer pour relire entièrement le nombre.
        cin >> n;
        cout << "Vous avez entré le nombre " << n << endl;
      }
      else
      {
        cin.unget();
        cin >> str;
        cout << "Vous avez entré le mot " << str << endl;
      }
     
      return 0;
    }
    Donc en bref, tu lis le premier caractère avec get(). Si tu rentres "54589", qui est un nombre, get va te renvoyer '5', car get() lit caractère par caractère. À noter que '5' et bien différent de 5. 5 est la valeur numérique 5 tandis que '5' est le caractère affichable 5 mais derrière '5' se cache en réalité un code ASCII (qui est un nombre), ici 53 comme nous le dit la table ASCII.

    Donc à ce moment là, tu peux tester si la variable c n'est pas égale à '|' vu que c'est un caractère. Si c'est égal, alors tu peux quitter, sinon il faut que tu lises le nombre en entier.

    Problème !!! Tu as déjà "consommé" le premier chiffre du nombre qui se trouvait dans le buffer, il faudrait donc le remettre dedans pour profiter de la conversion automatique des caractères fournies par std::cin. Oui car, même si tu ne vois rien, ton programme ne reçoit jamais le nombre 523685 tout cuit tout prêt dans une variable int. Il faut toujours prendre caractère par caractère et construire sois-même le nombre. Ce n'est pas compliqué mais ça nous fait gagner du temps que std::cin le fasse pour nous.

    Enfin soit, pour remettre ce fameux caractère dans le buffer tu fais un std::cin.unget() et ainsi tu peux relire l'entrée avec std::cin >> un_entier; qui te lira le bon entier.

    Maintenant il faut toujours se poser la question, que se passe t'il si l'utilisateur à écrit 5abc ? Notre programme pensera que c'est un nombre vu que le premier caractère est un entier mais queneni ! Il faut alors penser à tester la valeur de retour de std::cin. Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int n;
    if(std::cin >> n)
    {
      std::cout << "L'entier lu est " << n << std::endl;
    }
    else
      std::cout << "La saisie n'a pas pu être interprétée." << std::endl;
    HTH.

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Programmation B Stroustrup
    Bonjour à toutes et tous .

    Est-il possible est logique de "transformer" deux ou trois int en un char ???
    Cela simplifierais le test de contrôle .
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int a , int b , int c  = char a (Code totalement fantaisiste.)
    Cordialement .

  8. #28
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Que voudrais-tu que ça fasse ?

  9. #29
    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
    Citation Envoyé par Go'Gaule Voir le message
    Bonjour à toutes et tous .

    Est-il possible est logique de "transformer" deux ou trois int en un char ???
    Cela simplifierais le test de contrôle .
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int a , int b , int c  = char a (Code totalement fantaisiste.)
    Cordialement .
    un int c'est en général 8 bits, un char 4 bits.
    Et je n'ai absolument aucune idée de ce que tu espères avoir avec ton "code fantaisiste".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char a;
    int b,c,d;
    b=c=d=a;
    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.

  10. #30
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Programmation B Stroustrup
    Bonsoir à toutes et tous .

    @Ekleog && @Bousk , merci pour vos réponses .

    un int c'est en général 8 bits, un char 4 bits.
    Oui bien sur . .


    Cordialement.

  11. #31
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Citation Envoyé par Bousk Voir le message
    un int c'est en général 8 bits, un char 4 bits.
    [...]

  12. #32
    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
    Ouah comment j'ai pu écrire ces chiffres
    char en général 8 bits (1 octet), int 32 bits (4 octets)
    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.

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Programmation B Stroustrup
    Bonsoir à toutes et tous .

    Après une 'pause' , je me remets au ''travail'' .

    @Bousk ... Oh ...

    La première partie de l'exercice est comprise .
    Maintenant c'est quitter avec '|' que je ne parviens pas à réaliser .

    Cordialement.

  14. #34
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Programmation B Stroustrup
    Bonjour à toutes et tous .

    Après beaucoup de 'réflexion' , j'ai réussi a comprendre (?) .

    Voici mon oeuvre :
    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
     
    #include "std_lib_facilities.h"
     
     
    int main()
    {
     
           int n1 , n2 ;
     
           while  ((n1 != '|') && (n2 != '|'))                              // tant que nous n'écrivons pas || on continue
     
           {
                      cout << '\n' << " Entrez deux nombres séparés par un espace :" << '\n';
     
            if  (cin >> n1 >> n2)                                           // on test si n1 et n2 sont enregistrés
            {
                     cout << '\n' << "Vous avez écrit :" << n1 << " et " << n2 << '\n';
                    } else {
                        cout << " Erreur ! On ferme !" <<'\n';              // n1 et n2 non enregistrés fin du programme
                        break ;
     
            }
     
            if (n1 > n2) {
                cout << '\n' << "Le plus petit nombre est : " << n2 << "  Le plus grand est : " << n1 << '\n';}
           else if (n1 < n2){
                cout << '\n' << "Le plus grand nombre est : " << n2 << "  Le plus petit est : " << n1 << '\n';}
           else if (n1 == n2){
                cout << '\n' << "Les deux nombres sont égaux ! " << n1 << " et " <<  n2 << '\n';
           }
           }
    return 0;
    }
    Je voulais a tout prix vérifier l'entrée ..(numéro ou lettre.) ce n'était pas nécessaire .

    Si cela peut rendre service a un autre apprenti .

    Merci à tous .
    Cordialement.

Discussions similaires

  1. Programmation B Stroustrup (Suite ..)
    Par Go'Gaule dans le forum Débuter
    Réponses: 13
    Dernier message: 06/06/2012, 13h09
  2. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  3. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  4. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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