请问我能解释一下这段代码的原因是什么以及为什么它会打印b
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
n = 0;
if (n = 0)
printf("a \n");
else
printf("b \n");
return 0;
}
答案 0 :(得分:3)
此说明
if (n = 0) printf("a \n");
将做两件事:
将0分配给n
'return'0(这是诸如a = b = c
之类的多个内联赋值背后的原因:b = c
首先将b赋值c,然后返回b。 c的值,该值也将分配给a)
由于第二点,该指令与
相同if (0) printf("a \n");
在C中0的值为假,因此这是打印b
而不是a
的原因。
请记住,C语言和大多数语言中的equal operator
是==
,其中=
是赋值运算符,因此如果要检查的是{{1 }}为0,您应该这样做:
n
答案 1 :(得分:2)
这不是一个相等性检查,而是一个赋值。
表达式<mat-tab label="1">
<div *ngFor="let name of playerArr">
<h3>{{ name.playerName }}</h3>
<mat-form-field class="scoreInput">
<input matInput placeholder="Score" id="player0" />
</mat-form-field>
</div>
</mat-tab>
等于右表达式(或n = 0
)的值。由于0
被认为是错误的,因此将跳过第一个条件并打印0
。
您真正想做的是:
b
这里使用#include <stdio.h>
int main(void)
{
int n = 0;
if (n == 0) /* notice: == */
printf("a \n");
else
printf("b \n");
return 0;
}
,等于运算符。
答案 2 :(得分:1)
这是因为行:
if (n = 0)
单个=
用于分配变量。 ==
是如何比较c中的相等性。
因此,如果您替换
if (n = 0)
与
if (n == 0)
然后您将获得“ a”作为输出
答案 3 :(得分:1)
答案 4 :(得分:1)
由于n = 0
是一个执行赋值的表达式,所以会发生两件事,
n = 0
的值为0 这就是为什么一些建议写比较的原因,
if( 0 == n ) print("a\n");
因此,在打算使用=
时不会意外使用==
。
以及为什么有些编译器警告写赋值(您希望同时具有两种行为),
if( (n = 0) ) print("a\n");