矩阵输出是垃圾数据

时间:2014-03-11 00:22:13

标签: c arrays matrix output

所以,我在这里要做的是打印输出矩阵或只是一个数组。现在,输入文件有一组整数。我的问题是,当我输出矩阵时,它是一堆随机数。它也是单个数字,所以我认为它不是像指针那样的地址。输入文件中的第一个整数假设是数组长度,或者我在这里称之为“col”。

 #define MAX 10
 int main()
 {
    int col,row; /* array dimensions */
    int i,j,k; /* counter variables */
    int n; /* temporary variable for elements*/
    int temp[MAX*MAX]; /* temporary array for row counting */
    int counter=0; /* counter variable for number of rows */
    int matrix[MAX][MAX]; /* input matrix */
    FILE *in; /* pointer for input file of elements */

/* INPUT */
printf("\nPlease enter your desired number of columns and the elements of your matrix.\n");
fscanf(in,"%d",&temp[0]); /* Enter matrix length */

col = temp[0]; /* assign integer value to col variable */

if( col < 1 || col > MAX){ /* Standard Error for invalid input */
    fprintf(stderr,"\nInvalid Length\n");
    exit(1);
}

/* PROCESSING */

while(fscanf(in,"%d",&n)!=EOF){ /* determine number of rows */
    temp[counter++]=n;
}

if(counter % col == 0){ /* standard error for exceeding/lesser amount of input*/
    fprintf(stderr,"\nInvalid amount of input\n");
    exit(1); /* quits out the program for error */
}
else{
    row = counter / col; /* determine number of rows */
}

for(i = 0; i < row; i++){ /* read the elements */
    for(j = 0; j < col; j++){
        for(k=1; k < counter; k++){
            matrix[i][j] = temp[k];
        }
    }
}

/* OUTPUT */

fprintf(stdout,"\nHere is your matrix:"); /* Matrix Header */

for(i=0; i < row; i++){ /* print out the input matrix */
    fprintf(stdout,"\n");
    for(j = 0; j < col; j++){
        fprintf(stdout,"%3d ",matrix[i][j]);
    }
}
fprintf(stdout,"\n");

INPUT:     2     1 2 3     4 5 6

输出:     请输入所需的列数和矩阵元素。

Here is your matrix:
  6   6
  6   6
  6   6

^现在我不知道我们的UNIX系统是告诉我一些关于我自己或者是什么的东西。我现在很害怕。

编辑:好的,我删除了代码行之间的注释。 编辑:我编译并测试了该程序。

2 个答案:

答案 0 :(得分:2)

问题出在这里,每个矩阵i,j都会得到相同的k。

   for(i = 0; i < row; i++){ /* read the elements */
        for(j = 0; j < col; j++){
            for(k=1; k < counter; k++){
                matrix[i][j] = temp[k];
            }
        }
    }

change it to,

int count=0; 
   for(i = 0; i < row; i++){ /* read the elements */
        for(j = 0; j < col; j++){
                count++;
                matrix[i][j] = temp[count];
        }
    }

答案 1 :(得分:1)

如果那是完整的程序,似乎你永远不会fopen()编辑该文件。

for(i = 0; i < row; i++){ /* read the elements */
    for(j = 0; j < col; j++){
        for(k=1; k < counter; k++){
            matrix[i][j] = temp[k];
        }
    }
}

有你的问题。矩阵有多少维度?你使用了多少for循环?准确。

因为对于最里面的循环i和j的每次迭代保持不变,当k从1变为计数器时,你反复重写矩阵[i] [j],直到你总是达到相同的结束k的值。您的代码相当于:

for(i = 0; i < row; i++){ /* read the elements */
    for(j = 0; j < col; j++){
        matrix[i][j] = temp[counter-1];
    }
}