試行錯誤しながら数字を「推測」しようとするコンソールアプリケーションを書いていたのですが、うまくいきましたが、ぼんやりと書いた部分が気になりました。
コードは次のとおりです。
#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);
以前は、 0(またはfalse)が返さ((100/(i<<=1))?:1)
れた場合、式全体が1と評価されることを確認していました。条件の一部を残して、真に空の場合に機能するようにしました。正しく機能しているように見えますが、残すリスクはありますか。条件付きの空のその部分?100/(i<<=1)
((100/(i<<=1))?:***1***)
((100/(i<<=1))? _this space_ :1)