没有大括号的嵌套 IF-Else 的工作
Working of Nested IF-Else Without the Braces
有人可以向我解释 没有 大括号的嵌套 If-Else 语句的工作原理。
我想了解为什么 Below Program 没有给我任何输出。
我已经检查了所有 4 种可能性。
(外部如果,内部如果)::(真,真),(真,假),(假,真),(假,假)。
我正在使用 CodeBlocks 进行编辑,在 Windows.
上使用 gcc 编译器
int main()
{
int n=0,m=0;
if ( n > 0 )
if ( m > 0 )
printf("Inner-If Condition satisfied.");
else
printf("Inner-If condition not satisfied. ");
return 0;
}
谢谢。
它们的工作方式就好像 在下面的语句 周围有一个大括号。那么在你的情况下:
if ( n = 0 ){ // ToDo - did you mean `==`, `n = 0` is `0`.
if ( m = 0 ){ // ToDo - ditto.
printf("True");
} else {
printf("False");
}
}
在你的情况下,我认为困惑源于你使用 =
而不是 ==
。
if-else 歧义通过定义解决,即歧义的 else 属于最近的 if。
解析器会发现歧义,但是,解析器已经按照上述方法(例如 yacc)进行了调整以解决歧义。
注意:您的程序没有给出任何输出的原因是因为 n=0
(赋值)导致 n 为零,因此测试变为假,因此不采用分支并且 return 被执行。
在if语句中使用==。例如下面提到的代码将起作用。
if ( n == 0 )
if ( m == 0 )
printf("True");
else printf("False");
n = 0
是 C 语言中的一个 赋值 。它将 n
赋值为 0
。赋值也评估分配的值,所以在这里,0
,它在布尔上下文 false
中 - 所以你的外部 if
总是假的。
要比较两个值,请改用==
,在相等时计算结果为1
(true
),0
(false
) 关于不平等。 *)
您关于 if
和 else
的假设是正确的,您看不到输出的原因只是您在比较值时的错误尝试。
一个好的编译器会警告你这样的拼写错误。例如。使用 gcc
,使用 -std=c11 -Wall -Wextra
启用一组合理的警告。
*) 作为旁注,在布尔上下文中,零值是 false
而 任何其他值 是 true
,因此您可以也这样写代码(!
逻辑not
,反转真假):
if (!n)
if (!m)
// ...
这是否是好的风格取决于你问的是谁。如果 0
在语义上表示 缺少值 ,或者如果变量已经表示为布尔值,我个人喜欢这样写。然后 "if not n" 听起来很自然。
有人可以向我解释 没有 大括号的嵌套 If-Else 语句的工作原理。
我想了解为什么 Below Program 没有给我任何输出。
我已经检查了所有 4 种可能性。
(外部如果,内部如果)::(真,真),(真,假),(假,真),(假,假)。
我正在使用 CodeBlocks 进行编辑,在 Windows.
int main()
{
int n=0,m=0;
if ( n > 0 )
if ( m > 0 )
printf("Inner-If Condition satisfied.");
else
printf("Inner-If condition not satisfied. ");
return 0;
}
谢谢。
它们的工作方式就好像 在下面的语句 周围有一个大括号。那么在你的情况下:
if ( n = 0 ){ // ToDo - did you mean `==`, `n = 0` is `0`.
if ( m = 0 ){ // ToDo - ditto.
printf("True");
} else {
printf("False");
}
}
在你的情况下,我认为困惑源于你使用 =
而不是 ==
。
if-else 歧义通过定义解决,即歧义的 else 属于最近的 if。
解析器会发现歧义,但是,解析器已经按照上述方法(例如 yacc)进行了调整以解决歧义。
注意:您的程序没有给出任何输出的原因是因为 n=0
(赋值)导致 n 为零,因此测试变为假,因此不采用分支并且 return 被执行。
在if语句中使用==。例如下面提到的代码将起作用。
if ( n == 0 )
if ( m == 0 )
printf("True");
else printf("False");
n = 0
是 C 语言中的一个 赋值 。它将 n
赋值为 0
。赋值也评估分配的值,所以在这里,0
,它在布尔上下文 false
中 - 所以你的外部 if
总是假的。
要比较两个值,请改用==
,在相等时计算结果为1
(true
),0
(false
) 关于不平等。 *)
您关于 if
和 else
的假设是正确的,您看不到输出的原因只是您在比较值时的错误尝试。
一个好的编译器会警告你这样的拼写错误。例如。使用 gcc
,使用 -std=c11 -Wall -Wextra
启用一组合理的警告。
*) 作为旁注,在布尔上下文中,零值是 false
而 任何其他值 是 true
,因此您可以也这样写代码(!
逻辑not
,反转真假):
if (!n)
if (!m)
// ...
这是否是好的风格取决于你问的是谁。如果 0
在语义上表示 缺少值 ,或者如果变量已经表示为布尔值,我个人喜欢这样写。然后 "if not n" 听起来很自然。