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("%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];
        }
    }

のように読んでいる場合abcscanf("\n")cin.get()

于 2012-11-11T12:46:23.180 に答える
0

scanf の " の直後に空白を追加してみてください。

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

2次元マトリックスでも同じ問題があり、うまくいきました。理由はわかりませんが!!!ラップトップの前で1時間、さまざまなことを試しました...

于 2013-02-19T02:24:42.687 に答える
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が同等であると解釈されます。

于 2012-11-11T14:15:44.210 に答える