如何在C中使用double for loop for 2维数组?

Ale*_*ohr 1 c arrays matrix

我是C的新手,在使用指针和2D数组时遇到了麻烦.我有一个文件,我想从中读取值并将它们插入到2D数组中.格式化文件使得前2位数分别是行数和列数,并且该行上的其余数字填满矩阵.目前,它会正确读取行和列值,以及第一行数字,但在此之后不会继续.出了什么问题?我假设我用指针搞砸了一些东西,或者我在理解C中的2D数组时遗漏了一些东西.

码:

#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);
    ..
}
Run Code Online (Sandbox Code Playgroud)

fpin的内容:

3 3 0 6 4 2 2 5 4 5 0
Run Code Online (Sandbox Code Playgroud)

哪个应该读取rowA = 3,rowB = 3(它确实如此)然后用剩余的数字填充矩阵,但它在第一行之后停止.当我打印矩阵时,我得到了这个:

**** MATRIX **** Size = 3 x 3
0 6 4
Run Code Online (Sandbox Code Playgroud)

DAh*_*ens 8

你的内部for循环永远不会重复,因为你没有将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? */
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题,并允许后面的行工作.