C 中的字符矩阵问题

标签 c matrix printing char

我是 C 的初学者,目前遇到一些涉及字符的麻烦。 我在尝试在字符矩阵中输入值然后打印时遇到问题。

这是我的代码:

#include <stdio.h>
#define N 3

int main( )
{

char arr[N][N]={{0}};
int i,j;

for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        scanf("%c",&arr[i][j]);
    }
}

for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        printf("%c",arr[i][j]);
    }
}

return 0;
}

输出末尾缺少两个字符。

我不知道我做错了什么,我想了解我的错误:

-是否涉及 scanf 函数的某种问题?我以前听说过缓冲区,这有关系吗?问题是在我按下 enter 的那一刻出现的吗?

-我是否以错误的方式初始化了我的矩阵?

-在这种情况下使用 getchar() 会更好吗?如果是这样,我如何设法输入恰好 N*N 个值而不是更多?

非常感谢。 乔丹。

最佳答案

您应该使用 "%c" 来接受 char 作为输入。当您在 "%c" 之前添加一个 空格 时,它会消耗 white-spaces (换行符、制表符、空格等)与之前的输入一起输入。

#include <stdio.h>
#define N 3

int main() {

    char arr[N][N]={{0}};
    int i,j;

    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            scanf(" %c",&arr[i][j]);
            //     ^ --- the space before %c
        }
    }

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

    return 0;
}

输入:

a b c d e f g h i

您也可以使用EnterReturn 按钮一个一个地输入这些字符。

输出:

a b c 
d e f 
g h i 

您也可以查看 this帖子解决了同样的问题。

关于C 中的字符矩阵问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37795403/

相关文章:

c - OpenGL glAttachShader 不工作

Java 打印字体拉伸(stretch)

java - 在 Java 中使用 PrinterJob 打印 PDF 文件

c++ - SDL 中没有可用的视频设备

c++ - Vulkan SDK 可再发行组件

python - 为什么这在 c 中有效但在 python 中无效 : (a = 5) == 5

python - 根据对角线对 numpy 矩阵进行排序

c - 如何有效地仅反转分配矩阵的一部分

r - 将具有数字和普通数字向量的字符矩阵转换为数字

c# - 将图像的像素高度转换为图形对象使用的打印尺寸