【问题标题】:How can I print a x by x matrix in C?如何在 C 中打印 x x x 矩阵?
【发布时间】:2014-03-22 03:42:23
【问题描述】:
int main() {
    char gameArea[][8] = {
        {'X','X','X','X','X','X','X','X'},
        {'X','X','X','X','X','X','X','X'},
        {'X','X','X','X','X','X','X','X'},
        {'X','X','X','X','X','X','X','X'},
        {'X','X','X','X','X','X','X','X'},
        {'X','X','X','X','X','X','X','X'},
        {'X','X','X','X','X','X','X','X'},
        {'X','X','X','X','X','X','X','X'}};
    int i = 0; int j = 0;
    while (i<8) {
        while (j<8) {
            printf("%c",gameArea[i][j]);
            j++;
        }
        i++;
    }
    return 0;
}

输出:

XXXXXXXX
Process returned 0 (0x0)   execution time : 0.563 s
Press any key to continue.

理论上,i 会遍历列,并打印所有内容,但事实并非如此。非常感谢您的帮助。

【问题讨论】:

    标签: c matrix multidimensional-array printf


    【解决方案1】:

    你需要在每个内部循环之后将 j 设置回零

        printf("%c",gameArea[i][j]);
        j++;
    }
    j = 0;
    i++;
    

    for 循环更适合您的任务,如其他答案所述。

    【讨论】:

    • 在这种情况下使用for 循环会更好。
    【解决方案2】:

    我认为你想要一个 for 循环:

    for (int i = 0; i < 8; ++i) {
        for (int j = 0; j < 8; ++j) {
            printf("%c", gameArea[i][j]);
        }
        printf("\n");
    }
    

    这是你的循环的进程:

    • i = 0j = 0,打印 X 并递增 j
    • ...
    • i = 0j = 7,打印 X 并递增 j
    • j = 8开始,停止j循环并增加i
    • i = 1j 仍然是8,因为我们无法执行j-loop,所以增加i
    • ...
    • i = 7j 仍然是8,因为我们无法执行j-loop,所以增加i
    • 现在i = 8 所以停止i-loop。

    你想要做的是在j循环之后,当你增加i时,你还想将j重置为0。除此之外,您还想为下一行打印一个换行符,否则您将得到 64 个连续的 Xs。

    使用 for 循环:

    for (/*initialization*/; /*condition*/; /*increment*/) {
        /*loop body*/
    }
    

    是使用 while 循环执行此操作的捷径:

    /*initialization*/
    while(/*condition*/) {
        /*loop body*/
        /*increment*/
    }
    

    【讨论】:

      【解决方案3】:

      j 计数器需要在每个 i 循环开始时初始化。

      发生的事情是 j 循环一次,最后 j 是 8,所以 j 循环只迭代一次。

      while (i<8) {
          int j = 0;
          while (j<8) {
              printf("%c",gameArea[i][j]);
              j++;
          }
          i++;
      }
      

      【讨论】:

        【解决方案4】:

        您需要在第一个 while 循环开始时将 j 重置为 0,以便在每次迭代时,您仍然可以循环遍历内部循环。否则,一旦 j 等于 8,就不再进入内循环。

        【讨论】:

          【解决方案5】:

          插入j=0

          while (i<8) {
           j = 0; 
           while (j<8) {
                printf("%c",gameArea[i][j]);
                j++;
             }
           i++;
          }
          

          如果没有它,您的内部循环将只执行一次,因为j 在第一次运行后永远不会改变,并且不会再次满足循环条件。

          正如其他用户所建议的,您可能希望使用 for 循环来处理一些事情。

          【讨论】:

            【解决方案6】:
            int i = 0; int j = 0;
            while (i<8) {
                while (j<8) {
                     printf("%c",gameArea[i][j]);
                     j++;
                }
                i++;
                printf("\n")
            }
            

            【讨论】:

              【解决方案7】:

              在第一个 while (j&lt;8) 循环之后,没有任何东西将 j 重置为 0,与 i 类似,因此循环只运行一次,因此只打印一行。

              考虑使用for 循环:

              for (int i = 0; i &lt; 8; i++)

              另外,您是否尝试过调试代码,即设置断点并逐步执行?

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多