如何使用开关来偏移 for 循环的开始?

How do I use a switch to offset the start of a for loop?

我正在尝试制作跳棋游戏,现在我正在构建棋盘。棋盘是一个二维整数数组,我正在根据棋子的位置进行更改。

    // Sets up Red Pieces
int k = 0;
for (i = 0; i < 3; i++)
{
    
    for (j = k; j < 8; j += 2)
    {
        // Red piece is on square at coords [i][j]
        Board_Squares[i][j] += 2;

    }
    printf("\n");

    // k starts at 0, and in switch should alternate between 1 and 0, 
    switch (k)
    {
    case 0:
        k = 1;
    case 1:
        k = 0;
    }
} 

然而,这段代码只给我这个:

0 2 0 2 0 2 0
0 2 0 2 0 2 0
0 2 0 2 0 2 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0

任何帮助都是有用的。警告:我可能是个笨蛋。

另外,在这里使用 switch 语句是否正确?

您的代码中的问题来自缺少 break 语句:case 的代码落入下一个案例的代码。

这样修改:

    switch (k) {
      case 0:
        k = 1;
        break;
      case 1:
        k = 0;
        break;
    }

可以用简单的表达式获得相同的切换效果:

  • k = 1 - k;
  • k ^= 1;
  • k = !k;
  • k = k == 0;

或一些更复杂和晦涩的:

  • k = !!!k;
  • k = k ? 0 : 1;
  • k = (k + 1) & 1;
  • k = ""[k];
  • k = k[""];
  • k = 1 / (1 + k);

棋盘格单元格也可以直接初始化为01为:

Board_Squares[i][j] = (i + j) & 1;