ИЛИ и меньше, чем операторы, не работающие, как предполагалось, язык C
Я делаю упражнение из книги под названием "Программирование на языке C", пытаюсь решить упражнение 7.9, и поэтому мой код работает отлично, пока я не добавлю условное выражение для функции, принимающей только переменные, больше 0
Я пытался изменить его во многих отношениях, но ничего не работает
// Program to find the least common multiple
#include <stdio.h>
int main(void)
{
int lcm(int u, int v);
printf("the least common multiple of 15 and 30 is: %i\n", lcm(15, 30));
return 0;
}
// Least common multiple
int lcm(int u, int v)
{
int gcd(int u, int v);
int result;
if (v || u <= 0)
{
printf("Error the values of u and v must be greater than 0");
return 0;
}
result = (u * v) / gcd(u, v);
return result;
}
// Greatest common divisor function
int gcd(int u, int v)
{
int temp;
while (v != 0)
{
temp = u % v;
u = v;
v = temp;
}
return u;
}
Я ожидаю, что вывод lcm(15, 30) будет 30, но я продолжаю получать сообщение об ошибке, если оператор delete de if внутри функции lcm работает нормально, но я хочу, чтобы программа возвращала ошибку, если, например, я использую (0, 30)
2 ответа
if (v || u <= 0)
не говорит "если v
меньше или равно нулю ИЛИ, если u
меньше или равно нулю ", как я полагаю, вы думаете, что это так. Это на самом деле говорит" если v
не ноль, ИЛИ u
меньше или равно нулю ".
Операция a || b
тесты, если a
оценивается как ненулевое, и если нет, то проверяет, b
оценивает как ненулевое. Если либо a
или же b
не равен нулю, то выражение верно.
В C равенства и реляционные операторы, такие как ==
, !=
, <
, >
, <=
а также >=
произвести результат 1
если отношение верно, и 0
если это ложно, позволяет вам использовать их в условных выражениях.
Правильное условие:
if (v <= 0 || u <= 0)
if (v || u <= 0)
рассматривает v как логическую переменную, поэтому она верна для каждого ненулевого значения. Так что ваше if верно для любого ненулевого v. Используйте if (v <= 0 || u <= 0)