我正在編寫一個控制檯應用程序,試圖通過試驗和錯誤「猜測」一個數字,它工作正常,所有但它讓我想知道某個部分,我寫心不在焉,?:三元條件運算符行爲,當留下一個表達式爲空
的代碼是:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x,i,a,cc;
for(;;){
scanf("%d",&x);
a=50;
i=100/a;
for(cc=0;;cc++)
{
if(x<a)
{
printf("%d was too big\n",a);
a=a-((100/(i<<=1))?:1);
}
else if (x>a)
{
printf("%d was too small\n",a);
a=a+((100/(i<<=1))?:1);
}
else
{
printf("%d was the right number\n-----------------%d---------------------\n",a,cc);
break;
}
}
}
return 0;
}
更特別的是困惑我的部分是
a=a+((100/(i<<=1))?:1);
//Code, code
a=a-((100/(i<<=1))?:1);
我以前((100/(i<<=1))?:1)
使蘇如果100/(i<<=1)
返回0(或false),整個表達式將評估爲1 ((100/(i<<=1))?:***1***)
,並且如果它是真的空((100/(i<<=1))? _this space_ :1)
,我留下了可以工作的條件部分,它似乎能正常工作,但是在離開時有條件的空白的一部分?
這種類型的條件被稱爲三元操作。如果您重新標記或重新標題以包含「三元」,則可能會得到更好的回覆。 – 2010-07-23 14:32:21
@Segphault:它被稱爲*條件運算符(在C中)。它是* a *三元運算符的一個例子,它是一個通用術語,指的是具有三個操作數的任何運算符。 – JeremyP 2010-07-23 14:47:02
如果您懷疑,導致這個問題,毫無疑問,您應該明確地做出真實案例分配。 TooBored ....考慮不編碼愚蠢的控制檯遊戲,因爲它是一個積極的無聊反饋。 – jpinto3912 2010-07-23 14:56:57