Scanf错过线

时间:2012-11-11 12:28:36

标签: scanf

我写了一个测试程序,它应该采用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 :(得分: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]);
   }
}

虽然它会忽略所有空格:abca 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

您可以告诉读取和存储空格以及字母。

希望这有帮助。