我是 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
您也可以使用Enter 或Return 按钮一个一个地输入这些字符。
输出:
a b c
d e f
g h i
您也可以查看 this帖子解决了同样的问题。
关于C 中的字符矩阵问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37795403/