为什么变量不相等时陈述为真,变量相等时为假?

时间:2019-08-23 11:56:24

标签: c

我从昨天开始学习C,遇到一个问题,但我不知道为什么会发生。

代码是这个

#include<stdio.h>
int a=0;
void main() {
    if (a=13) {
        printf("Number Is Equal\n");
    }
    else {
        printf("Not Equal\n");
    }
}

它应该显示不相等,但仍然显示Number相等,我也尝试了其他数字来代替int a; 如果我分配int a = 13的值,然后运行if(a = 13)语句,则为true,但是如果我在两个地方都用0表示相同,则显示不相等。

3 个答案:

答案 0 :(得分:2)

您正在使用分配运算符13a分配给=。使用==进行比较。

示例:

int a=0;
void main()
{
    // Here, a is being checked to see if it is equal to the int 13.
    // a=13 would be assigning 13 to a, and then checking to see if
    // a is "truthy", or, not 0, which is why it was true for you every time.
    if (a == 13) {
        printf("Number Is Equal\n");
    }else{
        printf("Not Equal\n");
    }
}
  

注意:C标准指定main()托管环境中时将返回类型int(例如int main(){return 0;})。您可以与此不同当您处于独立环境中时,这将由实现定义。您不太可能使用独立式环境。奇怪的是,您处于托管环境中,对于void使用类型main会违反C标准。

答案 1 :(得分:0)

这里

int a=0;
if (a=13) { }
  

它应该显示不相等吗?

,由于赋值if非零,a=13条件始终为true,您需要改用==

更改此

if (a=13) { } /* = is assignment operator, condition remains always true */

if (a == 13)  {} /* use comparison operator == */

答案 2 :(得分:0)

您正在编写a=13,它将值13分配给a。由于该值非零,因此也被视为true(零将转换为false)。

您应该使用双等号写a == 13进行比较。