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

4 回答 4

0

尝试在您的 scanf 中添加一个空格,就在“

scanf(" %c",&a[i][j]);

我在二维矩阵中遇到了同样的问题,它对我有用。我不知道为什么!我只是在笔记本电脑前花了 1 个小时尝试不同的事情......

于 2013-02-19T02:24:42.687 回答
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()

于 2012-11-11T12:46:23.180 回答
0

@João Menighin 的回答肯定有效。如果您想避免使用 c++,这将起作用:

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

尽管它会忽略所有空格:两者都abca b c被解释为等效。

于 2012-11-11T14:15:44.210 回答
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 编译器上编译并运行此代码并输入一系列字符,然后按 enter。

abcdefghi
 a b c
 d e f
 g h i

混淆点可能是scanf从控制台缓冲区中提取数据。通常,(尽管您可以解决此问题)当您按 Enter 时,缓冲区会返回到您的程序。此外, 的格式说明符%c也接受空格。因此,我尝试使用以下输入和输出进行第二次运行。

a b c d e 
 a   b
   c  
 d   e

您可以分辨出空格以及字母已被读取和存储。

希望这可以帮助。

于 2013-08-04T22:46:33.623 回答