2012-04-27 34 views
2

我有下面的代碼來選擇正弦或餘弦加以整合,C,而環路邏輯(Y!=(1 || 0))

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爲true,有人可以解釋這裏有什麼問題嗎?謝謝。

回答

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)]

9

你需要(y != 1 && y != 0)(或類似的,這取決於你真正想表達的意思)。 ||運算符正在應用於操作數10。換句話說,y != (1 || 0)的意思是「做(1 || 0)然後做y != result」。

1
y != (0||1) 

相當於

y != 1 

因爲0||11。如果您需要y != 0y != 1,則需要進行兩次比較。

+0

這一定是真實的,或者你能只能保證(0 || 1)ISN」 t 0(這仍然會給OP帶來相同的行爲)? – 2012-04-27 15:33:17

+0

請參閱:http://stackoverflow.com/questions/7687403/is-the-true-result-of-or-defined/7687444#7687444 – Mat 2012-04-27 15:34:21

+0

@ScottHunter:'||'和'&&'將評估爲1爲真,0表示錯誤。 – 2012-04-27 15:55:12