鱼C论坛

 找回密码
 立即注册
查看: 1049|回复: 3

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

[复制链接]
发表于 2023-8-16 20:56:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

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

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

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


        return 0;
}

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

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

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

        
               
                printf("%c ", matrix[i][j]);
               
                printf("\n");
        }


        return 0;
}

我试过了,无法输出题目要求的矩阵,是什么原因呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-16 20:56:31 | 显示全部楼层
问题出在你修改后的代码中的printf语句位置不正确。在你的修改后代码中,printf语句应该放在两个for循环的内部,以便在每次输入字符后立即输出字符。此外,你还需要将printf语句放在一个嵌套循环中,以便按矩阵的方式输出字符。

下面是你修改后的代码:

#include <stdio.h>

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

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

    return 0;
}

这样修改后的代码会按矩阵的方式输出用户输入的字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 20:56:47 | 显示全部楼层
修改后的完整代码如下所示:
#include <stdio.h> int main(){    int matrix[3][3] = {0};    int i, j;     for (i = 0; i < 3; i++)    {        for (j = 0; j < 3; j++)        {            matrix[i][j] = getchar();            getchar(); // 读取输入字符后的换行符        }    }     for (i = 0; i < 3; i++)    {        for (j = 0; j < 3; j++)        {            printf("%c ", matrix[i][j]);        }        printf("\n");    }     return 0;}
问题分析和解答:

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

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

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

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 20:56:55 | 显示全部楼层
问题出在你修改后的代码中的这行代码:
printf("%c ", matrix[ i][j]);

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

要实现题目要求的矩阵输出,你应该将这行代码放在两层循环内部,即与第二个for循环对齐:
for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
        matrix[ i][j] = getchar();
        printf("%c ", matrix[ i][j]);
    }
    printf("\n");
}

这样,每次读取一个字符后,都会立即输出对应的元素,然后再进行下一轮循环。这样就能按照题目要求以矩阵形式输出用户输入的字符。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 08:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表