gpt4 book ai didi

c - 为什么这里会出现 'dangling else'的场景呢?

转载 作者:行者123 更新时间:2023-11-30 19:10:57 25 4
gpt4 key购买 nike

你认为这是一个悬空else的情况吗?

根据编译器和印度理工学院教授的说法,确实如此。但我有疑问!从理论上讲,在满足 if 的条件后,它总是只会进一步处理一条语句(或者一个复合语句,即括号内的多个语句)。在这里,在处理并满足第一个 if 后,编译器应考虑另一个 if 的立即语句并检查条件。如果不满足条件,则编译器将不会显示任何结果,因为我们没有任何与 printf 函数关联的 else 来表示不满足条件(即 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();
}

最佳答案

Wikipedia's definition of dangling else ,你确实有一个悬空的 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");
}

关于c - 为什么这里会出现 'dangling else'的场景呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40825259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com