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

问题描述

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

    // 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 = "\1"[k];
  • k = k["\1"];
  • k = 1 / (1 + k);

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

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