你认为这是悬空else
吗?
根据编译器和IIT教授的说法。但我有疑问!根据理论,在满足if
的条件后,它将始终仅处理一个语句(或一个复合语句,即括号内的多个语句)。这里,在处理并满足第一个if
之后,编译器应该考虑另一个if
的立即语句并检查条件。如果不满足条件,则编译器将不显示任何结果,因为我们没有任何关联的else
printf
函数表示条件不满足(即n
不为零)。
这里,编译器应始终将程序中给定的else
与第一个if
子句相关联,因为在if
之后给出的所有语句都没有用括号括起来。那么,为什么会出现悬挂else
的情况呢?
#include <stdio.h>
void main(void)
{
int n = 0;
printf("Enter value of N: ");
scanf("%d",&n);
if (n > 0)
if (n == 0)
printf("n is zero\n");
else
printf("n is negative\n");
getch();
}
答案 0 :(得分:1)
每Wikipedia's definition of dangling else,你有一个悬空的其他声明。
C使您的代码明确无误。您的代码被解释为:
if (n > 0)
{
if (n == 0)
{
printf("n is zero\n");
}
else
{
printf("n is negative\n");
}
}
您是否将代码解释为:
if (n > 0)
{
if (n == 0)
{
printf("n is zero\n");
}
}
else
{
printf("n is negative\n");
}
你会感到惊讶。
FWIW,无论使用哪种解释,您的代码都是错误的。
您需要拥有的是:
if (n > 0)
{
printf("n is positive\n");
}
else
{
if (n == 0)
{
printf("n is zero\n");
}
else
{
printf("n is negative\n");
}
}
或
if (n > 0)
{
printf("n is positive\n");
}
else if (n == 0)
{
printf("n is zero\n");
}
else
{
printf("n is negative\n");
}
答案 1 :(得分:0)
if (n == 0) printf("n is zero\n"); else printf("n is negative\n");
是一个声明和所以写:
if (n > 0) {
if (n == 0) {
printf("n is zero\n");
} else {
printf("n is negative\n");
}
}
或
if (n > 0) {
if (n == 0) {
printf("n is zero\n");
}
} else {
printf("n is negative\n");
}
每个人都清楚一切。
BTW:正确的缩进 - 由于我承认的复制和粘贴可能会被破坏 - 也有助于阅读代码和防止错误。答案 2 :(得分:0)
+1 @Bodo Thiesen建议总是使用花括号。我建议您也使用 clang-format 自动格式化代码。它将正确地识别一切,并且通常使编码变得美妙。
您可以广泛配置clang格式以匹配您的首选样式 - 这是您在LLVM的家居风格中的代码格式。
#include <stdio.h>
void main(void) {
int n = 0;
printf("Enter value of N: ");
scanf("%d", &n);
if (n > 0)
if (n == 0)
printf("n is zero\n");
else
printf("n is negative\n");
getch();
}