Switch 语句仅适用于某些情况
Switch statement only works for some cases
for(int i=0; i<3; i++){
switch(i)
case 0:
LAYOUT[i].x=i;
LAYOUT[i].y=i;
case 1:
LAYOUT[i].x=funcx(i);
LAYOUT[i].y=funcy(i);
case 2:
LAYOUT[i].x=2*i;
LAYOUT[i].y=4*i;}
这是我遇到问题的简化代码。我想让这段代码做的是,当 i=0 时,在情况 0 中执行什么操作,当 i=1 时,在情况 1 中执行什么操作,依此类推。
但这就是问题所在。例如,当 i=1 时,它会计算正确的 .x(案例 1)值,但对于 .y,它会计算不同的 i,例如 0 或 2。我试图将{} 围绕每个案例中的所有代码,但没有任何区别。我也试过从 1 到 3..
ofstream Zone1H;
Zone1H.open("TEST.txt");
for(int l=0; l<5; l++)
Zone1H<<LAYOUT[i].x<<" "<<LAYOUT[i].y<<endl;
我的储蓄部分可能是问题所在吗?不过这部分我从来没有遇到过问题..
您在每个 case
的末尾缺少一个 break
。所有案例都在下降,只有最后一个生效。
for(int i=0; i<3; i++){
switch(i){
case 0:
LAYOUT[i].x=i;
LAYOUT[i].y=i;
break; // <-- add this
case 1:
LAYOUT[i].x=funcx(i);
LAYOUT[i].y=funcy(i);
break; // <-- add this
case 2:
LAYOUT[i].x=2*i;
LAYOUT[i].y=4*i;
break; // <-- add this
}
}
您需要查看 break
声明。这在涉及 switch 语句时非常重要。如果没有中断,它会将其中一个评估为 true 并继续查看其余案例。如果你在每个语句找到正确的情况下添加一个中断,它将 "break" 跳出开关并继续循环中的下一个数字
每个 case 末尾的 break 将您带出 switch 语句并返回到 for 循环的顶部,这样您就不会遍历 switch 条件内的其他 case。
for(int i=0; i<3; i++){
switch(i){
case 0:
LAYOUT[i].x=i;
LAYOUT[i].y=i;
break;
case 1:
LAYOUT[i].x=funcx(i);
LAYOUT[i].y=funcy(i);
break;
case 2:
LAYOUT[i].x=2*i;
LAYOUT[i].y=4*i;
break;
}
}
for(int i=0; i<3; i++){
switch(i)
case 0:
LAYOUT[i].x=i;
LAYOUT[i].y=i;
case 1:
LAYOUT[i].x=funcx(i);
LAYOUT[i].y=funcy(i);
case 2:
LAYOUT[i].x=2*i;
LAYOUT[i].y=4*i;}
这是我遇到问题的简化代码。我想让这段代码做的是,当 i=0 时,在情况 0 中执行什么操作,当 i=1 时,在情况 1 中执行什么操作,依此类推。
但这就是问题所在。例如,当 i=1 时,它会计算正确的 .x(案例 1)值,但对于 .y,它会计算不同的 i,例如 0 或 2。我试图将{} 围绕每个案例中的所有代码,但没有任何区别。我也试过从 1 到 3..
ofstream Zone1H;
Zone1H.open("TEST.txt");
for(int l=0; l<5; l++)
Zone1H<<LAYOUT[i].x<<" "<<LAYOUT[i].y<<endl;
我的储蓄部分可能是问题所在吗?不过这部分我从来没有遇到过问题..
您在每个 case
的末尾缺少一个 break
。所有案例都在下降,只有最后一个生效。
for(int i=0; i<3; i++){
switch(i){
case 0:
LAYOUT[i].x=i;
LAYOUT[i].y=i;
break; // <-- add this
case 1:
LAYOUT[i].x=funcx(i);
LAYOUT[i].y=funcy(i);
break; // <-- add this
case 2:
LAYOUT[i].x=2*i;
LAYOUT[i].y=4*i;
break; // <-- add this
}
}
您需要查看 break
声明。这在涉及 switch 语句时非常重要。如果没有中断,它会将其中一个评估为 true 并继续查看其余案例。如果你在每个语句找到正确的情况下添加一个中断,它将 "break" 跳出开关并继续循环中的下一个数字
每个 case 末尾的 break 将您带出 switch 语句并返回到 for 循环的顶部,这样您就不会遍历 switch 条件内的其他 case。
for(int i=0; i<3; i++){
switch(i){
case 0:
LAYOUT[i].x=i;
LAYOUT[i].y=i;
break;
case 1:
LAYOUT[i].x=funcx(i);
LAYOUT[i].y=funcy(i);
break;
case 2:
LAYOUT[i].x=2*i;
LAYOUT[i].y=4*i;
break;
}
}