我的代码中有这个:
for(each player)
{
for(each packet of this player)
{
switch(packet_id)
{
case PACKET_TYPE:
{
if(someething is wrong)
{
skip this player iteration and go on with next player
}
}break;
}
}
}
有两个'FOR'和一个'SWITCH'
我如何从当前的PLAYER迭代中逃脱,从switch语句中跳转到另一个玩家?
答案 0 :(得分:5)
没有特别好的方法可以做到这一点。选项包括:
return
退出;或goto
跳出内循环。答案 1 :(得分:2)
休息会导致'案例'破裂吗?
是
继续;会导致下一个数据包被迭代吗?
是
您可以使用内部循环添加标记和 AND (&&)
:
for(each player)
{
bool flag = true;
for(each packet of this player && flag)
{ ^^^^^^^
switch(packet_id)
{
case PACKET_TYPE:
{
if(someething is wrong)
{
flag = false;
^^^^^^^^^^^^^
}
}break;
}
}
}
此外,在这种情况下,goto
使用{em>礼貌用于通过嵌套的开关/循环进行转义。
“这是使用goto的最后一个据点。” read here
答案 2 :(得分:1)
您可以将播放器的数据包循环重构为自己的函数或方法,然后条件语句可能会有return;
,这会将您转回到播放器循环中。
void processPackets(player){
for(each packet of this player)
{
switch(packet_id)
{
case PACKET_TYPE:
{
if(something is wrong)
{
return;
}
}break;
}
}
}
答案 3 :(得分:0)
bool
旗proceedToNextPlayer
怎么样?:
for(each player)
{
bool proceedToNextPlayer = false;
for(each packet of this player && !proceedToNextPlayer)
{
switch(packet_id)
{
case PACKET_TYPE:
{
if(someething is wrong)
{
proceedToNextPlayer = true;
skip this player iteration and go on with next player
}
} break;
}
}
}
答案 4 :(得分:0)
您可以随时使用旗帜:
for(each player)
{
bool skip_this_player = false;
for(each packet of this player and not skip_this_player)
{
switch(packet_id)
{
case PACKET_TYPE:
{
if(someething is wrong)
{
skip_this_player = true;
continue;
}
}break;
}
}
}