我在c中实现了一个简单的if语句,我将比较整数' tile'的值。四个其他整数:w,a,s和d。
这是我的代码:
if(tile == w || tile == a || tile == s || tile == d )
{
printf("legal\n");
return true;
}
虽然以上是正确的,但语法很无聊。是否有更优雅的方式来编写条件"' tile'是以下整数之一..."
我是编程方面的新手所以我道歉,因为我怀疑答案是非常明显的。但是,我没有在其他地方找到它。
答案 0 :(得分:3)
虽然eyalm's answer可能是您正在寻找的那个,但只是想在这里指出一个更重要的因素(正如您所提到的那样,"我&#39 ;编程中的新手" ),这是"编写代码,让人们更容易理解"。
虽然按位方法更短,但随着它的增长,通常似乎更难理解维护。
更简洁的方法是(虽然需要花费更多精力来编写代码),坚持使用if ( a || b || c)
语法或降低switch
的情况。它提供了更好的可读性。
最重要的是,没有正确或错误的方式,只选择使代码更易读和可维护的方式。
答案 1 :(得分:2)
我能想到的两个选择......
<强>按位强>
#define TILE_W 0x0001
#define TILE_A 0x0002
#define TILE_S 0x0004
#define TILE_D 0x0008
if (tile&(TILE_w|TILE_A|TILE_S|TILE_D))
{
printf("legal\n");
return true;
}
<强>的switch-case 强>
switch (tile)
{
case w:
case a:
case s:
case d:
printf("legal\n");
return true;
default:
return false;
}
答案 2 :(得分:1)
改进的解决方案可能取决于您与之比较的值。
如果w
,a
,s
和d
是具有连续值的整数(例如10,11,12和13),则if语句可以使用边界条件:
if( tile >= w && tile <= d) { printf("legal\n"); }
如果值不同(例如6,32,142,55),您可以使用switch
.. case
构造,例如
switch (tile)
{
case w:
case a:
case s:
case d:
printf("legal\n");
break;
default:
printf("ILLEGAL\n");
break;
}
您也可以在一个或多个if
中使用设置标记
int legal = 0;
// checking can be in different places of code
if (tile == w)
legal = 1;
if (tile == a || tile == s)
legal = 1;
if (tile == d)
legal = 1;
if( legal )
{
printf("legal\n");
}
并考虑将w
,a
,s
和d
值存储为有效值数组,因此可以使用循环进行检查:
int valArr[] = {101, 151, 333, 7}; // you can add any number of values here
int i;
int legal = 0;
for(i = 0; i < ( sizeof(valArr)/sizeof(valArr[0]) ); i++)
{
if(valArr[i] == tile)
{
legal = 1;
break;
}
}
if( legal )
{
printf("legal\n");
}
else
{
printf("ILLEGAL\n");
}