C语言while和else,多个If-Else语句VS.在C语言的While循环中切换语句

4 个答案:

答案 0 :(得分:3)

不,该代码无法使用switch进行编写。

case的值必须是常量和整数。你可以有case 4611:但不是'case a> 360" 。

因此,除非您需要数百个case语句(否则),否则代码不易翻译为使用switch。

更新让我(在我看来)更优雅的一种方法是订购范围,并依靠已在所有else if s中检查过的下限来减少重复:

while(1)

{

const float A = get_angle();

if (A > 1 && A <= 180)

{

put_speed (600, 200);

}

else if (A <= 360)

{

put_speed(600, 100);

}

else if (A <= 540)

{

put_speed(100, 600);

}

else if (A <= 700)

{

put_speed(200, 600);

}

else

{

put_speed(600, 600);

}

}

这个新版本假设get_angle()永远不会返回负值,如果发生这种情况,它会选择错误的选择。您可以先添加一个if来修复此问题,以捕获负值。

答案 1 :(得分:2)

首先,你的范围没有排序,这使你可能想做的事情有点混乱。重新安排您的代码:

if (A > 1 && A <= 180)

{

put_speed (600, 200);

}

else if (A > 180 && A <= 360)

{

put_speed(600, 100);

}

else if (A > 360 && A <= 540)

{

put_speed(100, 600);

}

else if (A > 540 && A <= 700)

{

put_speed(200, 600); //function to specify duty cycle and speed

}

else

{

put_speed(600, 600);

}

你可以看到范围或多或少是180的倍数。然而,范围的结束并不是我想象的那样(我原本预计会有720,而不是700)。

正如你的代码那样,把它写成一个开关很困难/适得其反,但你可以使用除法,特别是如果700是一个错字:

switch ((int)(floor((a - 1) / 180)))

{

case 0: //1 to 180

put_speed(600, 200);

break;

case 1: //181 to 360

put_speed(600, 100);

break;

case 2: //361 to 540

put_speed(100, 600);

break;

case 3: //541 to 720

if (a <= 700) //Odd

{

put_speed(200, 600);

break;

}

//fallthrough for 701 to 720 (v. strange)

default:

put_speed(600, 600);

}

答案 2 :(得分:1)

如果你想避免if-else你可以处理一系列的坐标,请注意你必须以f后缀为所有这些文字

#include

int main(void)

{

const float a[][4] = {

{540.f,700.f,200.f,600.f},

{1.f,180.f,600.f,200.f},

{180.f,360.f,600.f,10.f},

{360.f,540.f,100.f,600.f},

{0.f,0.f,600.f,600.f}

};

size_t i, count = sizeof(a) / sizeof(a[0]);

float A = 200.f;

for (i = 0; i < count; i++) {

if ((A > a[i][0] && A <= a[i][1]) || (i == count - 1)) {

printf("%.0f %.0f\n", a[i][2], a[i][3]);

break;

}

}

return 0;

}

答案 3 :(得分:1)

您可以使用开关盒。只需将角度除以180(保持整数)。

例如:

if(A> = 1&amp; A&lt; 180)然后用180除以将返回0。

if(A> = 180&amp; A&lt; 360)然后除以180将返回1.

或者如果你有条件,如

如果(A> 1&amp; A&lt; = 180)则除以181.它仍将导致0,然后您可以使用switch case。

注意:在这种情况下,If-else会更有效率,但你想学习它,所以这是我的建议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值