2013-09-26 23 views
1

我是C新手,無法使用指針和2D數組。我有一個文件,我想從中讀取值並將它們插入到二維數組中。該文件被格式化爲前兩位數分別是行數和列數,行中的其餘數字填充矩陣。目前它讀取行和列的數值,並且讀取第一行數字,但在此之後不會繼續。出了什麼問題?我假設我搞砸了與指針的東西,或者我很想念我的二維數組的理解東西C.如何在C中使用double for for 2維數組?

代碼:

#define MAXSIZE 10 
FILE *fpin 
.. 

int RdRowSize() 
{ 
    int row = 0; 
    fscanf(fpin, "%d", &row); 
    return row; 
} 

int RdColumnSize() 
{ 
    int col = 0; 
    fscanf(fpin, "%d", &col); 
    return col; 
} 

void RdMatrix(int *row, int *col, int matrix[][MAXSIZE]) 
{ 
    int i = 0, j = 0; 
    *row = RdRowSize(); 
    *col = RdColumnSize(); 
    for(i ; i < *row ; i++) { 
     for(j ; j < *col ; j++) { 
      fscanf(fpin, "%d", &matrix[i][j]); /* this stops after i = 0 for some reason? */ 
     } 
    } 
} 

void PrMatrix(int row, int col, int matrix[][MAXSIZE]) 
{ 
    int i = 0, j = 0; 
    for (i ; i < row ; i++) { 
     fprintf(stdout,"  "); 
     for (j ; j < col ; j++) { 
      fprintf(stdout, "%5d ", matrix[i][j]); 
     } 
     fprintf(stdout, "\n"); 
    } 
    fprintf(stdout, "\n"); 
} 

int main() 
{ 
    int A[MAXSIZE][MAXSIZE]; 
    int rowA = 0, columnA = 0; 
    RdMatrix(&rowA, &columnA, A); 
    PrMatrix(rowA, columnA, A); 
    .. 
} 

fpin的內容:

3 3 0 6 4 2 2 5 4 5 0 

其中應該讀取rowA = 3,rowB = 3(它確實)然後用其餘的數字填充矩陣,但它會在第一行之後停止。當我打印的矩陣我得到這個:

**** MATRIX **** Size = 3 x 3 
0 6 4 
+3

請包括您的打印代碼。 – chrisaycock

+0

我編輯過,對不起,第一次忘記了。 –

+0

這是什麼意思「停止」? –

回答

8

你內心的循環永遠不會重演,因爲你不復位j爲0

for(i=0 ; i < *row ; i++) { 
    for(j=0 ; j < *col ; j++) { 
     fscanf(fpin, "%d", &matrix[i][j]); /* this stops after i = 0 for some reason? */ 
    } 
} 

這應該可以解決這個問題,並允許後面的行才能工作。

+3

*嘆* ....感謝 –

3

你需要重新設置j零在內環

for(j = 0 ; j < *col ; j++) {

3

的問題是j的初始化。每次啓動j循環時,都需要將j初始化爲零。

for (j = 0 ; j < *col ; j++) 

會做的伎倆。