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 :

Comment écrire l'opérateur "ou" (||) ? [Débutant(e)]


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    812
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 812
    Points : 230
    Points
    230
    Par défaut Comment écrire l'opérateur "ou" (||) ?
    bonsoir à tous,
    je débute en C et j'ai besoin de l'opérateur logique "ou" je rentre || dans mon code et le compilateur le rejette . Y a t-il une procédure pour le rentrer ? Merçi de m'aider si possible

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    C'est bien || qui correspond à "ou" en langage C mais peut-être as-tu oublié des parenthèses dans ton code ? Peux tu nous donner le morceau de ton code pour que nous puissions t'aider plus clairement?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    812
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 812
    Points : 230
    Points
    230
    Par défaut Le "OU" en C
    Merçi pour ta réponse ; voiçi le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while (rep!='O') || (i>LGMAX);
    A +

  4. #4
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Comme l'a dit Archy27, il manque des paranthèses
    Dans ton cas, ta boucle est vide. Je ne sais pas si c'est volontaire, mais voici le code corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ((rep != 'O') || (i > LGMAX))
    {
       /* Corps de la boucle */
    }

  5. #5
    Membre du Club Avatar de Jordinateur
    Profil pro
    Inscrit en
    Février 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 119
    Points : 51
    Points
    51
    Par défaut
    Comme l'a dit Archy27, il manque des paranthèses
    Dans ton cas, ta boucle est vide. Je ne sais pas si c'est volontaire, mais voici le code corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ((rep != 'O') || (i > LGMAX))
    {
       /* Corps de la boucle */
    }

    ou plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (rep != 'O' || i > LGMAX)
    {
       /* Corps de la boucle */
    }
    Dites-moi si c'est la même chose ou si jme trompe !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Dites-moi si c'est la même chose ou si jme trompe !
    C'est effectivement la même chose.
    Toutefois, tout le monde ne maîtrise pas comme toi les règles de précédence des opérateurs. On préférera donc l'écriture de Freed0 qui n'est pas ambiguë. A la lecture, on sait aussitôt ce qu'il a voulu faire. A la tienne, non.

    Ici, ça va encore mais là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (a || b && c || d) {
     
    }
    Qu'ai-je voulu faire ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    812
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 812
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par aoyou Voir le message
    C'est effectivement la même chose.
    Toutefois, tout le monde ne maîtrise pas comme toi les règles de précédence des opérateurs. On préférera donc l'écriture de Freed0 qui n'est pas ambiguë. A la lecture, on sait aussitôt ce qu'il a voulu faire. A la tienne, non.

    Ici, ça va encore mais là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (a || b && c || d) {
     
    }
    Qu'ai-je voulu faire ?
    MErçi pour toutes ces réponses, je vais tester tout à l'heure l'histoire des parenthèses...
    Pour ce que tu veux faire (en citation), je pense que tu veux dire :
    (a ou b) et (c ou d)
    Suis je dans le vrai ?
    A +

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Suis je dans le vrai ?
    Effectivement, si on lit le code, on pourrait croire que j'ai voulu faire (a ou b) et (c ou d). Sauf que l'opérateur && est prioritaire. Je n'aurai donc pas ce que je veux.
    D'où l'importance de mettre des parenthèses dans les expressions booléennes même si on est sûr de son coup et que les règles de priorité sont en notre faveur.
    Ca facilitera la lecture du code pour tout le monde.

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par xeron33 Voir le message
    MErçi pour toutes ces réponses, je vais tester tout à l'heure l'histoire des parenthèses...
    Pour ce que tu veux faire (en citation), je pense que tu veux dire :
    (a ou b) et (c ou d)
    Suis je dans le vrai ?
    A +
    La precedence de l'opérateur && est supérieure à celle de ||. Ainsi, l'expression:

    est, si ne me trompe pas (j'ai plutôt l'habitude d'utiliser les parenthèses pour éclaircir ce genre de situations), équivalent à:

    Salutations

    EDIT: grillé!

    Thierry

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    La precedence de l'opérateur && est supérieure à celle de ||. Ainsi, l'expression:

    est, si ne me trompe pas (j'ai plutôt l'habitude d'utiliser les parenthèses pour éclaircir ce genre de situations), équivalent à:

    Exact. Pour retenir, le "et" est une multiplication (0*0 = 0, 1*1 = 1, 1*0 = 0) et le "ou" une addition. Question priorite des operateurs, le piege est avec les operateurs bit a bit (& ^ |) qui ont une priorite plus faible que la comparaison, ce qui est rarement ce qui est desire, il faut donc ecrire (a & mask) == valeur plutot que a & mask == valeur qui est interprete comme a & (mask == valeur).

  11. #11
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Exact. Pour retenir, le "et" est une multiplication (0*0 = 0, 1*1 = 1, 1*0 = 0) et le "ou" une addition. Question priorite des operateurs, le piege est avec les operateurs bit a bit (& ^ |) qui ont une priorite plus faible que la comparaison, ce qui est rarement ce qui est desire, il faut donc ecrire (a & mask) == valeur plutot que a & mask == valeur qui est interprete comme a & (mask == valeur).
    Merci pour ces précisions!

    Thierry

  12. #12
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Points : 292
    Points
    292
    Par défaut
    Bonsoir,
    Ne pas retenir les priorités des opérateurs : utiliser des parenthèses
    Lorsque l'on écrit "3 + 5 * 4", tout le monde sait que la multiplication est effectuée avant l'addition. Passé les quatre opérations de base cependant, les choses sont beaucoup moins évidentes. Plutôt que d'essayer de retenir les priorités des différents opérateurs, mieux vaut utiliser des parenthèses, cela évitera tout risque d'erreur, et rendra les choses beaucoup plus claires. Inutile de perdre ne serait-ce que quelques secondes à bien vérifier qu'on ne s'est pas trompé dans les priorités.
    Cordialement.

  13. #13
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Ne pas retenir les priorités des opérateurs : utiliser des parenthèses
    Même si utiliser les parenthèses quand on a un doute est un conseil de bon sens, le fait est que des gens d'expériences différentes ont des doutes différents. Et certains vont ne pas utiliser des parenthèses ou d'autres les jugent nécessaire. Et comme on passe pas mal de temps à lire du code, être capable de le comprendre sans référer à une source c'est utile...

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

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