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
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
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?
Merçi pour ta réponse ; voiçi le code :
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 while (rep!='O') || (i>LGMAX);
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 */ }
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
Dites-moi si c'est la même chose ou si jme trompe !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while (rep != 'O' || i > LGMAX) { /* Corps de la boucle */ }
C'est effectivement la même chose.Dites-moi si c'est la même chose ou si jme trompe !
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à
Qu'ai-je voulu faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while (a || b && c || d) { }
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.Suis je dans le vrai ?
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.
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 à:
Code : Sélectionner tout - Visualiser dans une fenêtre à part ( a || b && c || d)
Salutations
Code : Sélectionner tout - Visualiser dans une fenêtre à part ( a || (b && c) || d)
EDIT: grillé!
Thierry
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).
Bonsoir,
Cordialement.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.
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...Ne pas retenir les priorités des opérateurs : utiliser des parenthèses
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager