int a = 2; while (1 < a < 5) { printf("%d\n", a); a = a + 1; } In a C program, I have used the above code, but it is always counting infinitely. That means the test condition of the while loop is always true. But I could not understand why this is happening.
3 Réponses :
1 est regroupé sous la forme
(1 .
Pour votre valeur de a
, 1 renvoie
1
(true), donc maintenant votre expression devient 1 <5
, qui vaut toujours 1
, c'est pourquoi vous vous retrouvez avec une boucle infinie.
Le comportement souhaité peut être obtenu en écrivant à la place while ((1 .
" 1 ... est converti en
int
" - pas vraiment: 1 est de type
int code > (et la valeur
1
) pour commencer.
Pourriez-vous me diriger vers une source sur opérateur <
renvoyant un int
en C? Edit: Il s'avère que C n'a pas de type booléen. Pardonnez mon C ++.
@RcnSc: voir C11 6.5.8p6 .
@RcnSc 6.5.8 Opérateurs relationnels < / a>: "Chacun des opérateurs <(inférieur à),> (supérieur à), <= (inférieur ou égal à) et> = (supérieur ou égal à) donnera 1 si la relation spécifiée est vraie et 0 s'il est faux. Le résultat est de type int. " Note de bas de page 107 est directement pertinente: "L'expression a
@RcnSc: également C11 6.2.5p2 : "Un l'objet déclaré comme type _Bool
est suffisamment grand pour stocker les valeurs 0 et 1. " Si vous #include
, vous pouvez utiliser bool
au lieu de _Bool
.
J'espère que ma modification ne vous dérange pas. Ayez un vote positif et c'est une bonne première réponse!
Merci bonne journée.
(1
Merci, c'est très utile. Je suppose que j'ai besoin d'en savoir plus à ce sujet
Bienvenue sur Informatique ! Cela pourrait vous surprendre, mais votre question est hors sujet ici. Nous traitons des questions de science informatique, pas de questions de programmation. Veuillez consulter notre aide sur le sujet . Votre question pourrait être sur le sujet sur Stack Overflow .
Ce code vous aidera.
printf ("% d \ n", 1 <-1); printf ("% d \ n", 1 <1); printf ("% d \ n", 1 <2); pr intf ( "% d \ n", 1 <-1 <5); printf ("% d \ n", 1 <1 <5) ; printf ("% d \ n", 1 <2 <5 ); printf ("% d \ n", 1 <5 < 5); printf ("% d \ n", 1 <6 <5);
Ce qui se passe, c'est que le résultat d'une comparaison vaut 0 ou 1.@burnabyRails Merci, c'est très utile. Je suppose que j'aurai besoin d'en savoir plus à ce sujet ...