[英]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
}
}
每种情况结尾处的中断会使您退出switch语句,并返回到for循环的顶部,因此您将不会遍历switch条件中的其他情况。
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;
}
}
您需要查看break
语句。 在切换语句时,这非常重要。 在不中断的情况下,它会评估其中之一为真,并继续关注其余案例。 如果在找到正确的大小写时在每个语句中添加一个break,它将在开关中“跳出”并继续循环中的下一个数字
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.