2010-06-02 9 views
1

Quelqu'un peut-il expliquer ce qui se passe réellement dans ce code? Si je mets l'instruction AND, le message ne montrera pas si les valeurs sont inférieures à 0 ou supérieures à 10 ... Je pense que je dois utiliser la logique 1 0 pour faire ça correctement? J'ai juste besoin de quelqu'un pour l'expliquer brièvement s'il vous plaît.Vérification conditionnelle de base des instructions IF en C

#include<stdio.h> 
main(){ 

    puts("enter number"); 
    scanf("%d",num); 
    if(num<0 || num >10) 
    puts("yay"); 
} 

Comment est que si la déclaration différente quand ET est mis:

#include<stdio.h> 
main(){ 

    puts("enter number"); 
    scanf("%d",num); 
    if(num<0 && num >10) 
    puts("yay"); 
} 

Merci !!

+1

(a) vous devez déclarer 'num' et (b) vous besoin de passer un pointeur à 'num' à' scanf() ', pas' num' lui-même. Vous pourriez probablement également utiliser un texte d'introduction à la science informatique. –

+2

Pouvez-vous penser à un nombre qui est à la fois inférieur à zéro et supérieur à dix? – walkytalky

+0

@James, Oui, je sais que, merci de les signaler, je viens d'écrire un programme aléatoire ici .. donc raté ceux .... @walky, Nope, mais je cherchais une explication comme mentionné ci-dessous, merci pour la réponse si – NLed

Répondre

2

Ceci est basé sur la logique booléenne:

true || true -> true 
true || false -> true 
false || true -> true 
false || false -> false 

true && true -> true 
true && false -> false 
false && true -> false 
false && false -> false 

Remarquez comment les diffèrent quand un côté est vrai et l'autre est faux.

Quoi qu'il en soit, dans votre test:

if(num<0 && num >10) 

Il est impossible pour un certain nombre à la fois être < 0 et en même temps être > 10. Pour cette raison, vous devez évaluer true && false (pour les nombres négatifs), false && false (pour les nombres compris entre 0 et 10 inclus) ou false && true (pour les nombres supérieurs à 10). Dans tous ces cas, la logique booléenne indique que la réponse est false.

+0

Exactement ce que je cherchais, merci !! – NLed

2

Logique booléenne.

Si vous utilisez || (OR), l'instruction est vraie si TOUTES les conditions sont remplies. Si vous utilisez & & (AND), l'instruction est vraie uniquement si toutes les conditions sont remplies. SO dans votre deuxième exemple, l'instruction sera vraie si le nombre est plus petit que 0 ET plus grand que 10. Il n'y a manifestement pas de tel nombre.

+0

Merci de répondre :) – NLed

2

1) Je crois que vous avez oublié un certain caractère dans la chaîne de scanf:

scanf("%d",&num); 

2) premier exemple dire "youpi" si le nombre est inférieur à 0 ou PLUS DE 10

deuxième exemple ne dira jamais "yay" b/c nombre doit être inférieur à 0 et PLUS dE 10 simultanément

+0

Merci pour l'info, ouais je tape juste un programme aléatoire ici ... merci! – NLed

Questions connexes