Логический оператор И - PullRequest
       38

Логический оператор И

1 голос
/ 16 августа 2010

Я немного запутался с логическим оператором И. У меня есть эти 2 строки кода. Здесь num и j оба являются int. У меня ситуация, когда оба условия выполняются, но я не знаю, почему не печатается значение j Кто-нибудь может указать на ошибки? Заранее спасибо.

if(k==1 && num%j==0)
    printf("%d",j);

Ответы [ 6 ]

6 голосов
/ 16 августа 2010

На простом английском языке выражение k == 1 && num % j == 0 истинно тогда и только тогда, когда k равно 1 и , остаток от деления num на j равен 0Не намного больше я могу сказать.

1 голос
/ 16 августа 2010

Здесь есть две возможности. Либо вы никогда не доберетесь до printf, либо результат никогда не дойдет до вас.

Для первого случая, вы уверены, что k == 1 и num % j == 0? Предоставление нам фактических числовых значений в вашем тесте может помочь. Обратите внимание, что если k - это число с плавающей запятой, являющееся результатом вычисления, оно может быть очень незначительным по сравнению с 1,0, и условие вернет false.

Во втором случае, как вы это тестируете? Это должно вывести значение j, но оно не сбрасывает вывод, поэтому, если программа завершается ненормально, или консоль уходит в конце программы, или что-то такое, чего вы можете не видеть. Попробуйте printf("%d\n", j); или даже fflush(stdout);, чтобы убедиться, что вывод виден на вашей консоли или терминале.

0 голосов
/ 17 августа 2010

Вы должны также привыкнуть свободно использовать скобки, imo:

if(k == 1 && (num % j == 0))

как минимум.

0 голосов
/ 16 августа 2010

Ваш код работает нормально, посмотрите на этот контрольный пример:

http://ideone.com/1gz8R

Так что проблема не в этих двух строках.Попробуйте напечатать три значения непосредственно перед тем, как попасть в эти строки, вы можете быть удивлены тем, что видите (или не видите).

0 голосов
/ 16 августа 2010

Вы также можете добавить оператор else. Я не могу сосчитать, сколько раз это случилось со мной. Это хорошая практика, по крайней мере, на начальных этапах написания кода. сделать это:

это поможет вам уловить проблему

if(k==1 && num%j==0)
    printf("%d",j);
else {
   printf("%d \n",k);
   printf("%d \n",num);
   printf("%d \n",j);
   printf("%d \n",(num%j));
} 
0 голосов
/ 16 августа 2010

Если условия выполняются, в вашем коде проблем нет.

Проверьте вывод здесь .

...