C while循环逻辑(y!=(1 || 0))

时间:2012-04-27 15:29:21

标签: c

我有以下代码来选择要集成的sin或cos,

while( x !=1 || y !=(1||0) ){

      printf("Sin (1) or Cos (0)?\n");    
      x = scanf("%d",&y);
      _flushall();

      if(y==1){
        printf("Sin set\n");
      }
      else if(y==0){
        printf("Cos set\n");
      }
}

然而

    y!= (1||0)
对于y == 0,

永远不会评估为真,有人可以解释这里有什么问题吗?感谢。

3 个答案:

答案 0 :(得分:9)

您需要(y != 1 && y != 0)(或类似,这取决于您在那里表达的真实含义)。 ||运算符正在应用于操作数10。换句话说,y != (1 || 0)表示“执行(1 || 0)然后执行y != result”。

答案 1 :(得分:2)

您正在尝试直接有效地编码布尔代数,而C不会以您提供的方式接受它。

while( x !=1 || y !=(1||0) )

应该是

while( (x!=1) || ( (y!=1) || (y!=0) ) )

永远不要低估在C中使用多余括号的价值。优化器可能会优化代码以提高效率。

生成此错误的代码部分的计算结果如下: LHS(左手边),RHS(右手边)

  

LHS = y
      !=(1 || 0)[给出的定义]
      !=(1)[b / c(1 || 0)=(1)]

答案 2 :(得分:1)

y != (0||1)

相当于

y != 1

因为0||11。如果您需要y != 0y != 1,则需要进行两次比较。