2012-03-01 17 views
2

あなたがそれをコンパイルしたい場合、その部分のコードは以下の通りです。私のCプログラムは、それ以上の入力が必要なのはなぜですか?そして余分な入力は何もしません

基本的に、私は、次のデータおよびプログラムに入力それを取らなければならない:それは後

4 5 
12 5 7 0 -3 
9 11 2 5 4 
0 -5 9 6 1 
2 12 93 -15 0 
5 3 
7 1 31 
0 0 5 
-5 -3 2 
9 41 11 
0 13 31 

第4 & 5 3は、データが、第一及び第二の行列の大きさを表しますマトリックスのデータ。

問題は、それをコピーして貼り付けるときに、後でもう一度入力を要求し、何か(例えば84)を入力すると完璧に動作し(84)、何もしないように見えます。なぜこの余分なものを求めているのですか?

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    int rows1 = 1, columns1 = 1, rows2 = 1, columns2 = 1; // variables for number of rows and columns in each matrix 
     int i, j, k;            // loop variables 

     // These will affect the loop's length 
     scanf("%d %d", &rows1, &columns1); 
     int matrix1[rows1][columns1]; 
     for (i = 0; i < rows1; i++) { 
      for (j = 0; j < columns1; j++) { 
       scanf("%d ", &matrix1[i][j]); 
      } 
     } 


     scanf("%d %d", &rows2, &columns2); 
     int matrix2[rows2][columns2]; 
     for (i = 0; i < rows2; i++) { 
      for (j = 0; j < columns2; j++) { 
       scanf("%d ", &matrix2[i][j]); 
      } 
     } 
} 
+0

あなたのデータははっきりしていません。詳しいことはできますか? – Teja

+0

申し訳ありませんが、実際の投稿ではフォーマットが不適切です。私は今それを修正しました。 –

答えて

2

行動が原因で空白になります。(まあ、それは重要なだけで二番目だが、あなたは可能性があります

scanf("%d", &matrix1[i][j]); 
scanf("%d", &matrix2[i][j]); 

scanf("%d ", &matrix1[i][j]); 
scanf("%d ", &matrix2[i][j]); 

変更書式指定子にそれらを同一に保ちます)。

フォーマット指定子のスペースは、inの中の1つ以上の空白と一致します置く。コードが実行されると、最後のscanf()は、空白文字(884)を検出するまで、stdinから読み込みを開始し、プログラムは終了します。

5

あなたの最後のscanfはシング1は、あなたが "31"(または "31" または「31を提供する場合、整数
シング2は

空白のゼロ以上である2つのこと

   scanf("%d ", &matrix[i][j]); 
       //  112 

が必要です\ n ")をscanfに変更すると、と表示されます。空白です。 "84"を指定すると、空白が終了してプログラムで使用されていることがわかります。


提案:scanf変換指定子からすべての空白を削除します。scanf("%d%d")が良いです! "%d"変換指定子は、数値の前の空白を削除しています。

はいっそのこと、fgets()でデータを読んで、私は何が起こっていることは、あなたが scanf("%d ", &matrix2[i][j]);を使用するときに、整数の後に空白を指定したことだと思いsscanf()

1

で解析します。 scanfは、%dを使用するとデフォルトで空白を無視します。しかし、ファイルの終わりに達したときにスペースを指定した場合、そのスペースに続く空白がない整数は、フォーマットされた入力に一致するものは表示されません。新しい整数を入力すると、入力フォーマットを満たす最後の数字の後にもスペースを入れます。だから、必要な番号ではなく、空白になりました。

関連する問題