-1

我正在尝试将一段伪代码转换为 C 代码,并且我有类似的条件

if (-4 <= X <=8)
THEN {Do Something}
else
{Do something else}

if 语句中的语法是否有效?可以在逻辑条件中的变量之前放置一个常数来检查真值吗?

4

5 回答 5

8

在 C 中,您不能编写类似的条件

if (-4 <= X <= 8) {
     // ...
} else {
     // ...
}

相反,您必须将其拆分为两个单独的检查:

if (-4 <= X && X <= 8) {
     // ...
} else {
     // ...
}

这段代码现在完全没问题了——你可以在运算符的任一侧拥有任何你想要的<=操作数。

于 2013-06-10T20:05:18.530 回答
4

是的,您可以将常量作为 C 中逻辑检查的左侧参数。

但是,您列出的伪代码需要拆分为两个表达式:

if ((-1 <= X) && (X <= 8))

旁注:许多开发人员更喜欢“左侧常量”样式的逻辑语句,因为它会在某些容易出错的比较中导致编译错误。例如:假设您想评估if (X == 3)但不小心输入了if (X = 3). 后者是一个完全有效的 C 表达式,因为赋值操作返回 True。如果你使用“左侧常量”样式: if (3 = X)会导致编译错误,从而节省大量时间。

于 2013-06-10T20:07:26.507 回答
3

不; 那是行不通的。

-4 <= X是 0 或 1,始终小于 8。

于 2013-06-10T20:05:50.143 回答
1

if 语句中的语法是否有效?可以在逻辑条件中的变量之前放置一个常数来检查真值吗?

不确定语法是否正确,但在相等\不等式运算符的测试之前放置一个文字常量是一种常见的做法。喜欢:

if(7==x) {...} else {...}

有些程序员会这样做,因为如果你不小心忘记了相等\不等式\greater then 运算符测试中的第二个 '=' 符号,你会收到将变量赋值给文字,而不是测试,例如:

if(x=7) //danger! you're assigning to variable 'x' value of '7',
        //which will return true,  as a side-effect
//now (x==7)==true

此外,C 语言没有“THEN”关键字,该语言的发明者认为它是多余的——这显然很容易理解,如果你在 if 测试之后有一些东西,那么你可能会执行这段代码。喜欢

if(SOME_MAGIC_CONST==a) 
{
     //There couldn't be anything else at all! else can't follow if immediately, so...
}
else {
     //yep, keyword  'THEN' is redundant...
}
于 2013-06-10T20:12:32.550 回答
1

if 语句中的语法是否有效?

语法是有效的,但它不会做你所期望的。<=是 C 中的正常左结合二元中缀运算符,所以

-4 <= X <= 8

解析为

(-4 <= X) <= 8

的结果<=是一个布尔值,它 C 表示为1/ ,并且0两者都为真。0 <= 81 <= 8

要得到你想要的效果(检查是否X在一定范围内),你需要多个单独的比较结合&&.

可以在逻辑条件中的变量之前放置一个常数来检查真值吗?

是的。您还可以比较两个变量或两个常量或几乎任何东西。

<=,<和所有其他比较都是通用运算符。它们的操作数可以是您想要的任何表达式。(在语法上,即;为了使代码有意义,两个操作数也必须具有相同的类型。5 <= "abc"是类型错误。)

于 2019-06-04T10:07:57.883 回答