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