努力学C的阿通 发表于 2023-8-16 20:56:12

指针与二维数组-课后动动手1题

#include <stdio.h>

int main()
{
      int matrix = {0};
      int i, j;

      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 3; j++)
                {
                        matrix = getchar();
                }
      }

      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 3; j++)
                {
                        printf("%c ", matrix);
                }
                printf("\n");
      }


      return 0;
}

上面这段代码目的是实现的接收用户的输入,并将前 9 个字符以正方形矩阵(3 * 3)的方式输出。我有个疑问是为什么不直接写成
#include <stdio.h>

int main()
{
      int matrix = {0};
      int i, j;

      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 3; j++)
                {
                        matrix = getchar();
                }
      }

      
               
                printf("%c ", matrix);
               
                printf("\n");
      }


      return 0;
}

我试过了,无法输出题目要求的矩阵,是什么原因呢?

isdkz 发表于 2023-8-16 20:56:31

问题出在你修改后的代码中的printf语句位置不正确。在你的修改后代码中,printf语句应该放在两个for循环的内部,以便在每次输入字符后立即输出字符。此外,你还需要将printf语句放在一个嵌套循环中,以便按矩阵的方式输出字符。

下面是你修改后的代码:

#include <stdio.h>

int main()
{
    int matrix = {0};
    int i, j;

    for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 3; j++)
      {
            matrix[ i] = getchar();
            printf("%c ", matrix[ i]);
      }
      printf("\n");
    }

    return 0;
}

这样修改后的代码会按矩阵的方式输出用户输入的字符。

学习编程中的Ben 发表于 2023-8-16 20:56:47

修改后的完整代码如下所示:

#include <stdio.h>

int main()
{
    int matrix = {0};
    int i, j;

    for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 3; j++)
      {
            matrix = getchar();
            getchar(); // 读取输入字符后的换行符
      }
    }

    for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 3; j++)
      {
            printf("%c ", matrix);
      }
      printf("\n");
    }

    return 0;
}


问题分析和解答:

在原始代码中,使用了 getchar() 函数来逐个接收用户输入的字符,并将其存储在二维数组 matrix 中。然而,在这个实现中,需要注意的是,每次调用 getchar() 函数时,它会读取一个字符,包括用户输入的字符和回车换行符。因此,当我们想要输入一个字符后直接换行到下一行时,实际上输入的字符后面还有一个换行符,这个换行符会被作为下一个 getchar() 的输入。这就导致了输出结果不符合预期。

为了解决这个问题,我们可以在每次调用 getchar() 后再多调用一次 getchar() 来读取换行符。这样,每次输入字符后的换行符就不会影响下一个字符的输入。

在修改后的代码中,我加入了一行 getchar() 来读取每个输入字符后的换行符。这样就能够正确地接收并输出用户输入的 3x3 正方形矩阵。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-8-16 20:56:55

问题出在你修改后的代码中的这行代码:

printf("%c ", matrix[ i]);


在你的修改中,这行代码位于两层循环结束之后,也就是在for循环外部。由于这时i和j的值已经超出了数组的索引范围,因此无法正确输出矩阵。

要实现题目要求的矩阵输出,你应该将这行代码放在两层循环内部,即与第二个for循环对齐:

for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      matrix[ i] = getchar();
      printf("%c ", matrix[ i]);
    }
    printf("\n");
}


这样,每次读取一个字符后,都会立即输出对应的元素,然后再进行下一轮循环。这样就能按照题目要求以矩阵形式输出用户输入的字符。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 指针与二维数组-课后动动手1题