2016-06-13 20 views
1

私はC言語の初心者で、現在は文字を呼び出す際に問題が発生しています。 charマトリクスに値を入力しようとして問題が発生しました。出力の最後に欠けている2つの文字がありますCの文字マトリックスの問題

#include <stdio.h> 
#define N 3 

int main() 
{ 

char arr[N][N]={{0}}; 
int i,j; 

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

for(i=0;i<N;i++){ 
    for(j=0;j<N;j++){ 
     printf("%c",arr[i][j]); 
    } 
} 

return 0; 
} 

は、ここに私のコードです。

私は私が間違ってやっているかわからないと私は私のミスを理解したいと思います:

はそれをscanf関数のfonctionに関わる問題のいくつかの種類を-is?前にバッファについて聞いたことがありますか?私はエンターを押す瞬間から問題が起こっていますか?

-Amマトリックスを間違った方法で初期化していますか?

- この状況でgetchar()を使用する方が良いですか?もしそうなら、どうすればN * Nの値を正確に入力することができますか?

ありがとうございます。 ヨルダン。

+0

"出力の最後に2つの文字がありません。" - >投稿を投稿すると、出力と期待される出力は、このような投稿の役に立つ部分です。 – chux

答えて

5

入力としてcharを受け入れるには、" %c"を使用する必要があります。 スペース"%c"の前に追加すると、以前の入力で入力されたwhite-spaces(改行、タブ、スペースなど)を消費します。

#include <stdio.h> 
#define N 3 

int main() { 

    char arr[N][N]={{0}}; 
    int i,j; 

    for(i=0;i<N;i++){ 
     for(j=0;j<N;j++){ 
      scanf(" %c",&arr[i][j]); 
      // ^--- the space before %c 
     } 
    } 

    for(i=0;i<N;i++){ 
     for(j=0;j<N;j++){ 
      printf("%c ",arr[i][j]); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 

入力:

a b c d e f g h i 

また、入力を使用して、これらの文字一つ一つは、または戻るボタンを入力することができます。

出力:

a b c 
d e f 
g h i 

また、同じ問題に対処thisポストをチェックすることができます。

1

これを行う別の方法.. getchar();を追加します。 scanf()文の後の文。

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

getchar()は改行を消費します。各文字は\n becuase文字インデックスのいずれかに格納された後に改行文字を置くことはどの確かに文字そのものであるので、ちょうど押さずにシーケンスの9つの文字を入力してください。この場合

1

123456789\n 

のようにボタンを入力してくださいあなたは、上記の場合のみ5文字は、意図的にユーザーから取られることになる。この

1\n2\n3\n4\n5\ 

のように入力する必要はありません。