我有以下代码来选择要集成的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,永远不会评估为真,有人可以解释这里有什么问题吗?感谢。
答案 0 :(得分:9)
您需要(y != 1 && y != 0)
(或类似,这取决于您在那里表达的真实含义)。 ||
运算符正在应用于操作数1
和0
。换句话说,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||1
是1
。如果您需要y != 0
或y != 1
,则需要进行两次比较。