2

我有以下代码来选择要集成的 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 永远不会评估为真,有人可以解释这里有什么问题吗?谢谢。

4

3 回答 3

9

你需要(y != 1 && y != 0)(或类似的,这取决于你在那里表达的真正意思)。运算符被||应用于操作数10。换句话说,y != (1 || 0)意思是“做(1 || 0)然后做y != result”。

于 2012-04-27T15:31:33.107 回答
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)]

于 2012-04-27T19:31:10.153 回答
1
y != (0||1)

相当于

y != 1

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

于 2012-04-27T15:31:36.873 回答