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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti 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
    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
    Membre actif 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
    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.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    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
    Membre actif 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
    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

  7. #7
    Membre averti 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
    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 averti 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
    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!

+ 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