为什么(n = 0)== 0?

时间:2019-11-22 22:40:30

标签: c if-statement variable-assignment

请问我能解释一下这段代码的原因是什么以及为什么它会打印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;
}

5 个答案:

答案 0 :(得分:3)

此说明

if (n = 0) printf("a \n");

将做两件事:

  1. 将0分配给n

  2. 从赋值中
  3. '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)

因为:

(n = 0) == 0

=是C中的赋值运算符,它将0分配给nevaluates to the value being attributed。在这种情况下,0

答案 4 :(得分:1)

由于n = 0是一个执行赋值的表达式,所以会发生两件事,

  • n被赋值为0
  • 表达式n = 0的值为0

这就是为什么一些建议写比较的原因,

if( 0 == n ) print("a\n");

因此,在打算使用=时不会意外使用==

以及为什么有些编译器警告写赋值(您希望同时具有两种行为),

if( (n = 0) ) print("a\n");
相关问题