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 :

bool et if: pourquoi ça ne marche pas ?


Sujet :

C++

  1. #1
    Membre à l'essai Avatar de moniroge
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut bool et if: pourquoi ça ne marche pas ?
    Bonsoir...
    Je croyais que ce serait fastoche
    et en fait, je n'y arrive pas!!
    Dans tous les cas, j'ai " donc tu ne veux pas t'inscrire"
    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
     
    #include <iostream>
    #include "personnes.h"
     
    using namespace std;
     
    int main()
    {
      string pseudo;
      bool o(true);  // je déclare la variable booléenne o; il faut écrire (true)
      /* Le C++ utilise les mots-clés true (vrai) et false (faux) pour représenter les
       * booléens. */
     
      cout <<" Bienvenue parmi nous! "<< endl;
      cout << "Voulez-vous vous inscrire ? si oui, vous tapez la lettre o " << endl;
      cin >> o; /* marrant, je tape o et... il me dit: "donc tu ne veux pas ..." !!!
                 * et si je tape m, il me répond bien: "donc tu ne veux pas ..."  */
       if (o)
    // if (0==true)  // bof, pareil que if(o): "donc tu ne veux pas"
       {
         cout << "alors on se tutoie; c'est quoi, ton pseudo? " <<endl;
         cin >> pseudo;
       }
      else  
        {
          cout<< " donc tu ne veux pas t'inscrire "<<endl;
          cout<< " Salut! "<< endl;
        }
     /* Personnes::Personnes pseudo; /* ici le constructeur qui crée pseudo *
     // Error: Personnes::Personnes names the constructor, not the type
        pseudo.afficher(); */
     
        return 0;
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Si tu veux un booléen, alors rentres un booléen 0 (zéro) ou 1. Ici, vu que tu rentres le caractère 'o', la saisie échoue. Cf. Comment vérifier les valeurs saisies avec cin ?.
    Utilise à la place un char.

    Concernant l'erreur que tu as commenté, il ne faut pas écrire Personnes::Personnes pseudo;, mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Personnes personne(pseudo);
    personne.afficher();
    qui donne en paramètre de ton constructeur le string pseudo qui vient d'être saisi.
    N'espère pas avoir des noms de variable dynamiques en C++, c'est impossible.

    Et Personnes serait mieux au singulier, cette classe n'en représente qu'une seule.

  3. #3
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Essaie ce code et voit. en fait j'ai d'abord déclarer une variable 'o' de type char

    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
     
    #include <iostream>
    #include "personnes.h"
     
    using namespace std;
     
    int main()
    {
      string pseudo;
      char o (true); /*lettre 'o' et non le chiffre 0*/
      cout <<" Bienvenue parmi nous! "<< endl;
      cout << "Voulez-vous vous inscrire ? si oui, vous tapez la lettre o " << endl;
      cin >> o;/*lettre 'o' et non le chiffre 0*/
     
       if (o) /*lettre 'o' et non le chiffre 0*/
       {
         cout << "alors on se tutoie; c'est quoi, ton pseudo? " <<endl;
         cin >> pseudo;
       }
      else  
        {
          cout<< " donc tu ne veux pas t'inscrire "<<endl;
          cout<< " Salut! "<< endl;
        }
     
        return 0;
    }
    un booléen est une valeur 0 ou 1 et non un caractère.
    Au délà des codes de language, il y a la reflexion!

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et tous les caractères que tu peux saisir ne seront pas false, car le caractère 0 == '\0' est à peu près impossible à saisir.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par johntheripper Voir le message
    un booleen est une valeur 0 ou 1 et non un caractere.
    Alors pourquoi écrire un code comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char o (true); /*lettre 'o' et non le chiffre 0*/
    D'ailleurs, ton commentaire (note au passage que tu pourrais faire des commentaires avec // ici) ne te fait pas réagir ? Pourquoi ne pas appeler ta variable autrement, pour lever toute ambiguïté ? Au hasard, "choix" ou "reponse".

    En fait un booléen, c'est pas vraiment 0 ou 1. C'est VRAI ou FAUX et on utilise 0 et 1 pour représenter facilement ces deux états. Mais ces 0 et 1 sont dans un système où il n'y a que ces deux chiffres. if (2) est un test qui réussi toujours et pourtant 2 n'est pas un booléen. if ('2') aussi. Ça peut sembler du détail de savoir si un booléen c'est 0 et 1 ou VRAI et FAUX mais ça a une importance quand tu tentes de mettre "true" dans un "char".

  6. #6
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    J'ai ditque c'est 0 ou 1 parce que nous sommes en systemes de numeration numerique. dans un systeme de numeration numerique basique, les FAUX sont representés par les 0 et les VRAI par les 1, c'est la base. Maintenant coté electronique on peut representer les faux par les 1 ou les vrai par les 0, c'est un autre type de codage.

    il a precisé qu'il voulait le caractere 'o'. tout a fait d'accord avec toi pour l'ambiguité, cela m'est venu à l'esprit mais puisque ce n'est pas mon code a moi, il veut que choix soit le caractere 'o'. je n'y peut rien
    Au délà des codes de language, il y a la reflexion!

  7. #7
    Membre à l'essai Avatar de moniroge
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Houlala!!! vous partez tous en Août ???
    Je ne pensais pas avoir autant de réponses!!!
    C'est chouette!!! on dirait: Tous pour un, un pour tous. !!! trop bien.
    Bon, je vais copier-coller tout ça, apprendre, comprendre ?
    puis corriger mon exo et vous tenir au courant, promis,
    puis avancer, ....

  8. #8
    Membre à l'essai Avatar de moniroge
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Voilà, j'ai compris
    et... ça marche:
    finalement j'ai adopté ce code:
    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
    #include <iostream>
    #include "personnes.h"
     
    using namespace std;
     
    int main()
    {
      string pseudo;
     // je déclare la variable booléenne ouiDa; il faut écrire (true):
      bool ouiDa(true); /* Le C++ utilise les mots-clés true (vrai) et false (faux)
                         * pour représenter les booléens. */
      cout <<" Bienvenue parmi nous! "<< endl;
      cout << "Voulez-vous vous inscrire ? si oui, vous tapez le chiffre 1 " << endl;
      // parce que taper 0 ça fait "donc tu ne veux pas..."  soit 1 true et 0 false
      cin >> ouiDa;
       if (ouiDa)
       {
         cout << "alors on se tutoie; c'est quoi, ton pseudo? " <<endl;
         cin >> pseudo;
       }
      else
        {
          cout<< " donc tu ne veux pas t'inscrire "<<endl;
          cout<< " Salut! "<< endl;
        }
     /* Personnes::Personnes pseudo;  * ici le constructeur qui crée pseudo *
     // Error: Personnes::Personnes names the constructor, not the type
        pseudo.afficher(); */
        /* il ne faut pas écrire Personnes::Personnes pseudo;, mais:
         * Personnes personne(pseudo);
         * personne.afficher(); qui donne en paramètre du constructeur le string
         * pseudo qui vient d'être saisi. */
     
        return 0;
    }
    mais j'ai aussi essayé comme m'a conseillé Johnripper et c'est OK
    En tout cas merci à vous tous!

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Points : 395
    Points
    395
    Par défaut il faut utiliser true et false et pas 1 et 0
    je ne connais pas d'exemple où false ne vaut pas 0 mais attention à la valeur de true par exemple dans ce cas-là

    Nom : Untitled.png
Affichages : 407
Taille : 16,6 Ko



    Edit : On peut savoir pourquoi quelqu'un a décidé de me mettre un moins ? Je ne fais que dire qu'il ne faut pas croire que true vaut 1.
    Preuve à l'appui... à moins que ce soit un anti Microsoft qui y va de son pouce rouge dès qu'il voit du Microsoft ou du Windows quelque part.

  10. #10
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    On se fiche pas mal des autres langages. De plus, la lecture d'un booléen à partir d'un flux est complètement normalisée et configurable (et l'écriture aussi, et la conversion depuis un entier).

    http://en.cppreference.com/w/cpp/io/.../operator_gtgt et http://en.cppreference.com/w/cpp/locale/num_get/get

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

Discussions similaires

  1. Pourquoi INTERSECT ne marche pas ?
    Par Chatbour dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/06/2007, 22h03
  2. [Débutante] Pourquoi ça ne marche pas...?
    Par Tootsi dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/02/2006, 16h58
  3. Pourquoi ce code marche pas sous FF?
    Par Death83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/09/2005, 10h04
  4. [W3C] Pourquoi ça ne marche pas sous IE
    Par polo-j dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 16/02/2005, 16h07

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