Базовая условная проверка для операторов IF в C - PullRequest
1 голос
/ 03 июня 2010

Может кто-нибудь объяснить, что на самом деле происходит в этом коде? Если я добавлю оператор AND, сообщение не будет отображаться, если значения меньше 0 или больше 10 ... Я думаю, что я должен использовать логику 1 0, чтобы решить это правильно? Мне просто нужен кто-то, чтобы кратко объяснить это, пожалуйста.

#include<stdio.h>
main(){

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

Чем отличается это выражение IF, когда ставится AND:

#include<stdio.h>
main(){

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

Спасибо !!

Ответы [ 3 ]

2 голосов
/ 03 июня 2010

Булева логика.

Если вы используете || (ИЛИ), утверждение верно, если ЛЮБОЕ из условий выполнено. Если вы используете && (AND), оператор верен ТОЛЬКО, если ВСЕ условия выполнены. Итак, во втором примере утверждение будет истинным, если число ОБА меньше 0 и больше 10. Понятно, что такого числа нет.

2 голосов
/ 03 июня 2010

1) Я полагаю, вы забыли какой-нибудь символ в строке scanf:

scanf("%d",&num);

2) первый пример скажет «yay», если число меньше, чем 0 или больше, чем 10

во втором примере никогда не будет сказано "yay", ч / б номер должен быть меньше, чем 0 и БОЛЬШЕ, ЧЕМ 10 одновременно

2 голосов
/ 03 июня 2010

Это основано на булевой логике:

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

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

Обратите внимание, как они различаются, когда одна сторона верна, а другая ложна.

В любом случае, в вашем тесте:

if(num<0 && num >10)

Невозможно, чтобы число было < 0 и одновременно > 10. По этой причине вы будете либо оценивать true && false (для отрицательных чисел), false && false (для чисел от 0 до 10 включительно) или false && true (для чисел больше 10). Во всех этих случаях логическая логика говорит, что ответ false.

...