2012-03-01 22 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 & 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

你的數據不是clear.Can你細說嗎? – Teja 2012-03-01 16:31:19

+0

對不起,它在實際文章中格式不佳。我現在修好了。 – 2012-03-01 16:42:10

回答

2

行爲是由於空格:

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

更改格式說明:

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

(好吧,這只是第二個是重要的,但你可能並保持它們完全相同。)

格式說明符中的空格與in中的一個或多個空格匹配放。當運行代碼,最終scanf()坐在那裏從stdin讀書,直到遇到一個非空白字符(884),此時它返回和程序結束。

5

你最後scanf函數需要2個東西

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

事情1是一個整數
東西2等於或大於零的空白

如果您提供的 「31」(或 「31」 或「31 \ n「)到scanf它會預期更多空格。 一旦你提供了「84」,它就知道空白已經結束並繼續執行程序。


建議:從scanf轉換說明移除所有的空格:scanf("%d%d")好! "%d"轉換說明符已經在數字前刪除了空格。

更重要的是,與fgets()讀取數據,並與sscanf()

1

我認爲,正在發生的事情是,你指定的整數後的空白,當你使用 scanf("%d ", &matrix2[i][j]);解析。當使用%d時,scanf默認會忽略空格。但是,您指定了一個空格,以便在它到達文件結尾時看到一個沒有空格的整數,然後它看不到任何與格式化輸入匹配的內容。一旦你輸入新的整數,你還可以在滿足輸入格式的最後一個數字之後加一個空格。所以這不是你需要的數字,而是空白。

相關問題