OR 并且小于不按预期 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: %in", 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,但我不断收到错误,如果 lcm 函数内的删除 de if 语句工作正常,但我希望程序返回错误,例如我使用 (0, 30)

if (v || u <= 0)并不是说"如果v小于或等于零,或者如果u小于或等于零",就像我相信你认为的那样。它实际上是在说"如果v不为零,或者u小于或等于零"。

该操作a || b测试a的计算结果是否为非零,如果没有,则测试b的计算结果是否为非零。如果 ab 不为零,则表达式为 true。

在 C 语言中,相等和关系运算符(如 ==!=<><=>= 1关系是否为真,如果关系为假,则0产生结果,允许您在条件表达式中使用它们。

正确的条件是:

if (v <= 0 || u <= 0)

if (v || u <= 0)将 v 视为布尔变量,因此对于每个非零值都是正确的。所以你的 if 对于任何非零 v 都是真的。使用if (v <= 0 || u <= 0)

最新更新