2016-02-14 18 views
2

我試圖從文件中讀取兩個大小,然後是矩陣。該代碼看起來像這樣2d矩陣不存儲值,所有值顯示爲0

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *fp; 
    int n,m; 

    fp = fopen("grille.txt", "r"); 
    fscanf(fp, "%d", &n); 
    fscanf(fp, "%d", &m); 
    int mat[n][m]; 
    int i,j,temp; 
    for(i=0;i<n;i++) 
    { 
     for(j=0;j<m;j++) 
     { 
      fscanf(fp, "%d", &temp); 
      mat[n][m] = temp; 
     } 
    } 
    fclose(fp); 

    for(i=0;i<n;i++) 
    { 
     for(j=0;j<m;j++) 
     { 
      printf("%d ",mat[n][m]); 
     } 
     printf("\n"); 
    } 

} 

如果我打印出temp在閱讀它,所有值都正確顯示。但是,當試圖從矩陣打印它們時,會打印正確大小的空矩陣。我學會了用C++進行編程,而這些c東西中的一些讓我感到困惑。

+3

'mat [n] [m] = temp;' - >'mat [i] [j] = temp;'同上打印循環。由於數組的索引從'0'到'dimension-1',所以你正在寫所有值*超出範圍* –

+0

@WeatherVane有人開槍射擊我。請發佈完整答案。 – aron9forever

+0

「我學會了使用C++編程,並且使用了一些c」 - 嗯......你會驚訝C++與Modula不同嗎?如果是的話,那麼爲什麼驚訝C也是不同的?所有三種都是不同的語言。 – Olaf

回答

1

問題是您不使用循環控制變量來索引數組。相反,你只使用陣列的尺寸,如

mat[n][m] = temp; 

這當然應該是

mat[i][j] = temp; 

也有同樣的閃失,在打印循環了。

還有一個未定義的行爲這個錯誤的副作用,因爲索引數組維度,將索引超出數組範圍。