我写了一个测试程序,它应该采用3x3字符矩阵并输出输入的矩阵。但是,我必须输入4行才能使程序生成相应的矩阵。我已经查找了scanf函数的问题,但是我尝试过的解决方案似乎都没有用......你能帮帮我解决这个问题吗?
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char a[3][3];
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
scanf("%c",&a[i][j]);
}
scanf("\n");
}
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
printf("%c",a[i][j]);
}
printf("\n");
}
system("PAUSE");
return(0); }
答案 0 :(得分:0)
scanf("%c",...)
获取空格和\n
。你可以通过多种方式解决它:
如果您阅读a b c
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
scanf("%c",&a[i][j]);
cin.get(); //Get the spaces after each character and the \n at the end of each line
}
}
或者您可以简单地使用cin
(使用scanf读取char / string输入始终是个问题)
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
cin >> a[i][j];
}
}
如果您的阅读时间为abc
,则只需将scanf("\n")
替换为cin.get()
答案 1 :(得分:0)
@JoãoMenighin的答案肯定有效。如果你想避免使用c ++,那就可以了:
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
scanf(" %c",&a[i][j]);
}
}
虽然它会忽略所有空格:abc
和a b c
都会被解释为等效。
答案 2 :(得分:0)
尝试在“
之后的scanf中添加一个空格scanf(" %c",&a[i][j]);
我在二维矩阵中遇到了同样的问题,它对我有用。 我不知道为什么!!!我只是花了一个小时在我的笔记本电脑前尝试不同的东西......
答案 3 :(得分:0)
尝试过你的IT工作。虽然,我的每条评论都做了一些修改:
#include <stdio.h> // added, but that shouldn't matter
main()
{
char a[3][3];
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
scanf("%c",&a[i][j]);
}
//scanf("\n"); // not necessary, see below
}
for(i=0;i<3;++i)
{
for(j=0;j<3;++j)
{
printf(" %c",a[i][j]);
}
printf("\n");
}
return(0);
}
在Eclipse / Microsoft C编译器上编译并运行此代码,然后输入一系列字符,然后输入。
abcdefghi
a b c
d e f
g h i
混淆点可能是scanf
从控制台缓冲区中提取数据。通常,(尽管您可以解决此问题)当您按Enter键时,缓冲区将返回到您的程序。此外,%c
的格式说明符也接受空格。因此,我尝试使用以下输入和输出进行第二次运行。
a b c d e
a b
c
d e
您可以告诉读取和存储空格以及字母。
希望这有帮助。