所以,我在这里要做的是打印输出矩阵或只是一个数组。现在,输入文件有一组整数。我的问题是,当我输出矩阵时,它是一堆随机数。它也是单个数字,所以我认为它不是像指针那样的地址。输入文件中的第一个整数假设是数组长度,或者我在这里称之为“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系统是告诉我一些关于我自己或者是什么的东西。我现在很害怕。
编辑:好的,我删除了代码行之间的注释。 编辑:我编译并测试了该程序。
答案 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];
}
}