#include <stdio.h>
int main()
{
int a=4,b=5,x=7;
if(a=3)
if (b=0)
x=10;
else
x=0;
printf("%d\n",x);
printf("%d\n",b=a);
return 0;
}
我目前正在学习 C,我知道=
是用于给变量赋值,而==
是用于比较;但是,我不太清楚=
在语句中使用时代码是如何运行的if
。在上面的代码中,我认为发生的事情是,在语句if
运行时,首先赋值,然后进行比较,因此我不明白为什么打印 时会得到 0。x
还是反过来?
4
最佳答案
2
您的缩进具有误导性。使用正确的缩进,您的代码将如下所示:
#include <stdio.h>
int main()
{
int a=4,b=5,x=7;
if(a=3)
if (b=0)
x=10;
else
x=0;
printf("%d\n",x);
printf("%d\n",b=a);
return 0;
}
这是因为一个else
语句总是属于最近的if
语句,除非你使用括号将其与不同的if
语句关联起来,例如像这样:
#include <stdio.h>
int main()
{
int a=4,b=5,x=7;
if(a=3)
{
if (b=0)
{
x=10;
}
}
else
{
x=0;
}
printf("%d\n",x);
printf("%d\n",b=a);
return 0;
}
误导性的缩进解释了为什么你的程序的输出x
是0
而不是7
。
,大多数好的编译器都会警告您else
在这种情况下使用没有明确括号的语句。例如,在编译器 GCC 和 Clang 上,如果您启用了以下警告,您将收到类似这样的警告:-Wall
-Wextra
<source>:9:9: warning: add explicit braces to avoid dangling else [-Wdangling-else]
9 | else
| ^
作为初学者,我建议您始终使用括号(即使不需要),以防止将来出现此类混淆。
在上面的代码中,我认为发生的情况是,当运行 if 语句时,首先分配值,然后进行比较 […]
这是正确的。
1
-
我建议“作为一名C 程序员,我建议你总是使用括号(即使不需要)。”我曾经是代码风格阵营的一员,当只有一行时会跳过括号,但这种风格只会导致错误、错误和更多的错误。
–
|
在 C 语言中,赋值本身有一个值,该值实际上就是刚刚被赋的值。
例子:
printf("%d\n", a = 3); // will print 3, and a will contain 3
所以这样:
if (a = 3)
printf("Foo\n");
相当于这样:
a = 3;
if (a)
printf("Foo\n");
因此if
在这里是没有意义的,因为除 0 之外的任何东西都被视为真,因此上面的代码归结为:
a = 3;
printf("Foo\n");
|
else
“属于”if (b=0)
–
{
大括号}
。–
0
是false
,其他任何语言都是true
。没有“然后比较完成”。–
==
。因此您应该告诉我们您指的是什么比较。–
|