2016-12-24 12 views
1

私はscanfを使って5x5行列入力をcで取りたいと思います。たとえば、ユーザタイプが1 2 3 4 5 6 7 8 9 10の場合、arr [0] [0] = 1、... arr [1] [0] = 0のような2次元配列を作成したい場合は、 6 ..等 入力も新しい行で行うことができます。ユーザからの行列入力を受け取りました

私はこれを試みた:

int main() { 
     int arr[5][5]; eipus(arr); 
     char c; int r=0; int col=0; 
     while ((c=getchar()) != EOF) { 
       if (col >= 5) { col=0; r++; } 

       if (scanf("%d",&arr[r][col]) == 1) { col++; } 
     } 
     printArr(arr); 
     return 1; 
} 

eipus() - 0 printArrに配列を設定 - アレイを印刷します。

問題は、常に最初の番号を無視することです。

[[email protected]]$ a.out 
1 2 3 4 5 6 7 8 
2 3 4 5 6 
7 8 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

数値は無視されます。 1の前にスペースがあればOKです。

+1

'c = getchar()'は1文字を破棄します。 – BLUEPIXY

+0

http://stackoverflow.com/questions/23572964/getchar-or-putchar-keeps-eating-the-first-character-of-my-input – Codesingh

答えて

1

getchar()は1文字を消費します。より興味深い結果を得るには、入力を与えてみてください。 12 3 4

最初の要素は2になります。 ungetc()を使用して、前の状態に戻ります。 EOFは-1

+0

私は試してみました。どうすれば修正できますか? – Ginger

+0

ああええ...申し訳ありません...私は逃した.. – coderredoc

+0

@BLUEPIXY。:ありがとう – coderredoc

0

以外の何ものでもないと、あなたがそれint cようにする必要がありちなみに

while ((c=getchar()) != EOF) { 
       ungetc(c,stdin); 
       if (col >= 5) { col=0; r++; } 

       if (scanf("%d",&arr[r][col]) == 1) { col++; } 
     } 

は、あなたが入力した非常に最初の文字が原因行 while ((c=getchar()) != EOF)に変数cでスキャンします。

スキャンされた値cをループ全体のマトリックス要素に入力できます。

関連する問題