繁体   English   中英

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
  }
}

每种情况结尾处的中断会使您退出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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM