2013-09-26 29 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++) 

会做的伎俩。