Scanf错过了一行

3
我写了一个测试程序,应该输入一个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); }
4个回答

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读取字符/字符串输入总是有问题)

 for(i=0;i<3;++i)
    {
        for(j=0;j<3;++j)
        {
            cin >> a[i][j];
        }
    }

如果你正在阅读类似于abc的代码,你只需要将scanf("\n")替换为cin.get()


0

@João Menighin的答案肯定有效。如果你想避免使用C++,这个也可以:

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

虽然它会忽略所有的空格:无论是abc还是a b c都会被解释为等价的。


0

尝试了你的方法,它确实有效。不过,我根据评论做了一些修改:

#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从控制台缓冲区中提取数据。通常情况下(虽然你可以绕过这个问题),当你按下回车键时,该缓冲区将返回到你的程序中。此外,%c格式说明符也接受空格。因此,我尝试了第二次运行,使用以下输入和输出。
a b c d e 
 a   b
   c  
 d   e

你可以看出空格也被读取并存储了,就像字母一样。

希望这能帮到你。


0
尝试在您的scanf语句中,在“

”之后添加一个空格。
scanf(" %c",&a[i][j]);

我在一个二维矩阵中遇到了同样的问题,但是这个方法对我有效。虽然我不知道为什么!!!我刚刚花了一个小时在电脑前尝试不同的方法...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接