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 :

probleme avec if()


Sujet :

C++

  1. #1
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut probleme avec if()
    bonjour à tous !! peut-être allez vous vous moquez de moi ou dire que je suis nul mais bon

    voila j'ai un problème avec la fonction if(): je veux créer un programme simple permettent de "dialoguer" avec l'ordinateur
    je m'explique tout d'abord j'affiche (je mets simplement les partis du code utiles):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string rep1;
    cout << "bonjour comment allez-vous ??" << endl;
         if(rep1=="bien, merci")
        {
         cout << "de rien" << endl;
        }
    jusque là sa va, mais est-ce que dans ma fonction if() je peux ne pas mettre de "else" et embreiller sur une fonction if() comme cela (le code suivant est la suite du code ci-dessus):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        if(rep1=="sa va pas trop !")
        {
        cout << "qu'est-ce qui a ?" << endl;
        }
    (les codes ne sont que des exemples !)

    mais sinon est-ce que je peux faire le programme écrit ci-dessus ou faut-il que je le modifie ?

    merci d'avance!

  2. #2
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut
    au fait pour information j'utilise Dev-C++

  3. #3
    Membre éclairé
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    Par défaut
    Tu peux faire comme ca :
    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
     
    string rep1;
    cout <<"Bonjour comment aller vous ??" << endl;
    getline(cin, rep1); /*Prend en compte les espaces */
       if (rep1 == "ca va pas trop !")
       {
       /*Instructions */
       }
       else /* Sinon */
       {
          if (rep1 == "bien")
          {
          /*Instructions */
          }
       }
    Tu peux continuer indefiniment si tu en a envie !

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    if n'est pas une fonction mais une structure de contrôle...tant qu'a faire utilisons le vocabulaire qui va bien...

  5. #5
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    D'aprés ce que je comprends c'est plutot ça que tu veux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string rep1;
    cout << "bonjour comment allez-vous ??" << endl;
    if(rep1=="bien, merci")
    {
         cout << "de rien" << endl;
    }
    else
    {
        if(rep1=="sa va pas trop !")
        {
           cout << "qu'est-ce qui a ?" << endl;
        }
    }
    Tu peux mettre un else et "embrayer" avec un autre if, et cela sur plusieurs profondeurs.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il est plus pratique d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string rep1;
    cout << "bonjour comment allez-vous ??" << endl;
    if(rep1=="bien, merci")
    {
         cout << "de rien" << endl;
    }
    else if(rep1=="sa va pas trop !")
    {
         cout << "qu'est-ce qui a ?" << endl;
    }

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonjour,

    On pourrait même ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    string rep1;
    cout << "bonjour comment allez-vous ??" << endl;
    getline( cin, rep1 ) ; 
    if(rep1=="bien, merci")
    {
         cout << "de rien" << endl;
    }
    else if(rep1=="sa va pas trop !")
    {
         cout << "qu'est-ce qui a ?" << endl;
    }
    else 
    cout <<  "je n' ai pas compris" << endl ;
    salut

  8. #8
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut
    Donc si j'ai bien compris, je peux faire 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
     
    cout << "bonjour comment allez-vous ??" << endl;
    if(rep1=="bien, merci")
    {
         cout << "de rien" << endl;
    }
    else
    {
        if(rep1=="sa va pas trop !")
        {
           cout << "qu'est-ce qui a ?" << endl;
        }
    }
    else
    {
       if(rep1=="bof")
       {
          cout << //instruction
       }
    }
    et ainsi de suite! c'est ça ?

  9. #9
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut
    Citation Envoyé par hegros
    if n'est pas une fonction mais une structure de contrôle...
    merci pour la précision !

  10. #10
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Non, en fait tu peux avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(...)
    {
    }
    else
    {
    }
    Et autant de structure comme celle-ci à l'intérieur des paires d'accolades, mais pas deux else derrière un if(){ }.

    Pour expliquer le fonctionnement du if il vaut mieux éviter de simplifier les parenthèses dès le début...

    Si tu essayes de compiler tu vas voir qu'il y a un problème

  11. #11
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut
    Citation Envoyé par matrem
    Tu peux mettre un else et "embrayer" avec un autre if, et cela sur plusieurs profondeurs.
    oui je veux bien mais peux-tu me faire un exemple pour que je vois vraiment de quoi il retourne ? merci

  12. #12
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Comme fullben l'a si bien écrit, if() et son pendant else sont des structures de contrôle.

    Pour etre complet, if effectue un controle booléen: qui ne peut avoir que deux valeurs (vrai ou faux) et else, ben c'est ce qui est effectué si le si le résultat du test n'est pas "vrai".

    Tu l'as surement déjà remarqué, mais, quand on demande d'effectuer une boucle ou un test, il est courent de vouloir faire effectuer plusieurs instructions selon le résultat du test ou dans la boucle.

    Le langage est ainsi fait que, si plusieurs instructions doivent etre effectuées, elles doivent etre entourée d'accolade "{" au début et "}" à la fin.

    Mais, si les accolades sont absentes, il n'y a que l'instruction qui suit directement qui est prise en compte.

    Et l'instruction, ce peut très bien etre une autre structure de test ou une autre structure de boucle...

    Ainsi, les codes
    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
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
        {
            instruction 1;
            instruction 2;
            ...
        }
    //et
    if(machin==truc)
        une seule instruction
    else if (bidul==brol)
    {
        instruction 1;
        instruction 2;
        ...
    }
    fourniront EXACTEMENT le meme résultat que les 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
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            instruction 1;
            instruction 2;
            ...
        }
    }
    //et
    if(machin==truc)
    {
        une seule instruction
    }
    else
    {
        if (bidul==brol)
        {
            instruction 1;
            instruction 2;
            ...
        }
    }
    Parce que, dans les premières versions, la seule instruction qui doit etre effectuée est... d'entrer dans la structure suivante

    Simplement, la lisibilité sera *peut etre* meilleure pour la deuxième version de la boucle imbriquée et pour la première version du test...

    Pour en revenir à la structure de test if() avec ou sans else, il faut savoir que tu peux très bien envisager... de ne rien faire si le résultat du test est faux...

    Dans ce cas, il n'est absolument pas nécessaire de mettre un bloc "else" qui soit vide

    Maintenant, il t'appartient de savoir dans quelle mesure un test doit etre effectué ou non en fonction du résultat du test précédent...

    Ainsi, si le deuxième test vérfie une autre valeur pour la meme variable, il est fort probable (mais pas sur à cent pourcents, cependant) qu'il trouve naturellement sa place dans la partie "else" du premier test...

    Si par contre, tu veux tester une autre variable dans le deuxième test, trois grosses possibilités s'offrent à toi:
    • Le deuxième test doit etre effectuer si le premier était vrai (ou les actions à effectuer ne doivent l'etre que si le premier test a réussi): il faut placer le deuxième test dans la partie "if"
    • le deuxième test doit etre effectué si le premier a échoué (ou les actions effectuées uniquement si le premier test a échoué): le test doit etre placé dans la partie "else" du premier
    • le deuxième test est indépendant du premier (quoi qu'il arrive, il doit etre effectué): il prend naturellement sa place en dehors de la structure du premier test

    Evidemment, ce qui est vrai pour deux tests le reste pour autant que tu peux en souhaiter
    NOTA: Hormis les test "vrai/faux", il est possible de créer une structure de test "à valeurs multiples"... C'est la fameuse structure "switch... case"...

    Mais cette structure ne peut etre utilisée que si la valeur peut etre considérée comme strictement numérique (un entier ou un caractère précis, ea )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  13. #13
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut
    merci koala01 pour toutes ces précisions

  14. #14
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut
    merci aussi à tous ceux qui m'ont gentiment répondu

  15. #15
    doccpu
    Invité(e)
    Par défaut
    si tu à ta reponse marque le message comme resolu avec le bouton en bas a gauche.

    perso j'aime bien la structure :

    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
    if(test == "test 1e")
    {
        //code
    }
    else if(test == "test 2nd")
    {
        //code
    }
    else if(test == "test 3eme")
    {
        //code
    }
    else
    {
        //code
    }
    ce qui remplace avantageusement une structure swich qui n'est utilisable que pour des cardinaux. Par contre je te deconseille de ne pas metre les acolades dans les structures. ça nuis gravement a la relecture du code et c'a n'apporte aucun avantage.

  16. #16
    Membre confirmé Avatar de fullben
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Par défaut
    tout d'abord merci doccpu pour ton avis: c'est en fait ce que j'ai fit pour mon programme
    aussi, si je ne mais pas le post en c'est que je voulais voir toutes les réponses qui arrivent comme la tienne

  17. #17
    doccpu
    Invité(e)
    Par défaut
    oki

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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