为什么这个布尔值不能给我正确的值?

时间:2019-04-08 15:29:50

标签: c boolean principles

首先,我的程序可以运行,但是b3表达式(一个boolean)的功能不如我想要的那样。当我选择一列火车是DIESEL或ELECTRICAL时,不是给我值0(false),而是当某些火车是DIESEL或ELECTRICAL时给了我1(TRUE)值。仅当两列火车都是电气的或两列都是柴油的时才给出错误。当一列火车是电动的而另一列是柴油的时,它使我一直给我1(真)。我的代码更广泛,但是这些都是与我所解决的问题有关的部分。

typedef enum{ELECTRICAL, CARBON, SOLAR, GASOLINE, DIESEL, MAGNETIC} tPropulsion;    
typedef enum{FALSE, TRUE} boolean;    
int main()
{
    tPropulsion propulsionType1, propulsionType2;
    boolean b2, b3, b4;

    printf("Insert type of propulsion of train1>> 0-ELECTRICAL, 1-CARBON, 2-SOLAR, 3 GASOLINE, 4-DIESEL, 5-MAGNETIC ");
    scanf("%u", &propulsionType1);

    printf("Insert type of propulsion of train2>> 0-ELECTRICAL, 1-CARBON, 2-SOLAR, 3 GASOLINE, 4-DIESEL, 5-MAGNETIC ");
    scanf("%u", &propulsionType2);

    b3 = propulsionType1 != DIESEL && propulsionType2 != ELECTRICAL && 
    propulsionType1 != DIESEL && propulsionType2 != ELECTRICAL;


    printf("Neither train 1 or train 2 are DIESEL or ELECTRICAL is (0-FLASE, 1-TRUE)>> %u", b3);
}

1 个答案:

答案 0 :(得分:0)

首先:

  • 缩进代码
  • 使用括号
  • 您可以像这样使用自己的布尔值,而不是将enum用作布尔值:
#define TRUE (0==0)
#define FALSE !TRUE

然后澄清您的陈述,您想要什么?

“如果火车1或火车2是DIESEL或ELECTRICAL,则为TRUE,否则为FALSE”

    b3 = ((propulsionType1 == DIESEL) || (propulsionType2 == ELECTRICAL)) ||
    ((propulsionType1 == DIESEL) || (propulsionType2 == ELECTRICAL));

然后查看propulsionType1和propulsionType2

    b3 = ((propulsionType1 == DIESEL) || (propulsionType1 == ELECTRICAL)) ||
    ((propulsionType2 == DIESEL) || (propulsionType2 == ELECTRICAL));
相关问题