【问题标题】:How to use double for loop for 2 dimensional array in C?如何在C中对二维数组使用double for循环?
【发布时间】:2013-10-03 00:42:27
【问题描述】:

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

代码:

#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

【问题讨论】:

  • 请附上您的打印代码。
  • 我编辑了,抱歉,第一次忘记了。
  • “停止”是什么意思?
  • 我还有一个问题。使用我在这里的相同设置,我想为 fpin 文件中的多个矩阵循环它,但我不知道如何判断它何时位于文件末尾。 (每个矩阵都有自己的一行)
  • @Xzar 当您在文件中写入矩阵的维度时,还会提供有关从文件中读取多少矩阵的信息

标签: c arrays matrix


【解决方案1】:

你的内部 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? */
    }
}

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

【讨论】:

    【解决方案2】:

    您需要在内部循环中将j 设置为零

    for(j = 0 ; j &lt; *col ; j++) {

    【讨论】:

      【解决方案3】:

      问题是j的初始化。每次启动 j 循环时,都需要将 j 初始化为零。

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

      会成功的。

      【讨论】:

        猜你喜欢
        • 2019-06-02
        • 2021-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        相关资源
        最近更新 更多