if 语句中可以使用赋值运算符吗? as if 语句使用了布尔表达式
Can assignment operator be used in if statements. As if statements are used Boolean expression
我原以为 if(b=5)
会出错,因为在 if 语句中使用了赋值运算符。
Code:
#include <stdio.h>
int main() {
int a=10, b=10;
if(b=5)
a--;
printf("%d, %d", a, b--);
return 0;
}
您预计它会引发错误,因为它似乎是尝试使用比较运算符 ==
的拼写错误,通常用在像这样的 if 语句中
if ( b == 5 )
if语句中的表达式
if ( b = 5 )
实际上像 C 中的每个表达式一样求值。在这种情况下,它的求值是赋值 5
的值,并且由于它不是零,所以它等效于布尔表达式中的 true
.
这可能是一个微妙的错字,所以作者可能进行了比较而不是那个分配。无论如何它不会引发错误,因为 它是有效的 C.
幸运的是,在许多编译器中会引发 警告。确保在编译器选项中启用所有警告,并且永远不要忽略它们。这样你以后就可以避免这些微妙的陷阱了。
在 if 语句中有一个有效的赋值。这种操作的结果是分配的值 (5),它在 if 语句中有效并且计算结果为真。
实际上,任何非 0 的数字都将被解释为真。
也许你已经知道了,但你没有在那里进行比较。比较运算为==
.
我原以为 if(b=5)
会出错,因为在 if 语句中使用了赋值运算符。
Code:
#include <stdio.h>
int main() {
int a=10, b=10;
if(b=5)
a--;
printf("%d, %d", a, b--);
return 0;
}
您预计它会引发错误,因为它似乎是尝试使用比较运算符 ==
的拼写错误,通常用在像这样的 if 语句中
if ( b == 5 )
if语句中的表达式
if ( b = 5 )
实际上像 C 中的每个表达式一样求值。在这种情况下,它的求值是赋值 5
的值,并且由于它不是零,所以它等效于布尔表达式中的 true
.
这可能是一个微妙的错字,所以作者可能进行了比较而不是那个分配。无论如何它不会引发错误,因为 它是有效的 C.
幸运的是,在许多编译器中会引发 警告。确保在编译器选项中启用所有警告,并且永远不要忽略它们。这样你以后就可以避免这些微妙的陷阱了。
在 if 语句中有一个有效的赋值。这种操作的结果是分配的值 (5),它在 if 语句中有效并且计算结果为真。
实际上,任何非 0 的数字都将被解释为真。
也许你已经知道了,但你没有在那里进行比较。比较运算为==
.