我正在编写一个控制台应用程序,该应用程序尝试通过反复试验来“猜测”一个数字,它运行良好,并且所有操作都使我想知道我心不在part地写的某个部分,
代码是:
#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***),如果条件为true ((100/(i<<=1))? _this space_ :1),则将条件部分保留为空,这似乎可以正常工作,但存在离开的任何风险有条件的那部分是空的?
天涯尽头无女友
侃侃尔雅