我正在进行一项用于将两个可变大小的2d矩阵相乘的赋值。
我一直有同样的问题,并坚持如何解决它:当调用输入来定义矩阵时,行的最后一列由于某种原因没有得到输入。而是将下一行的第一列写入两个点。
例如,如果您尝试输入2 x 2
1 2
3 4
它将存储为
1 3
3 4
我搜索过,似乎找不到任何类似的问题。它对任何大小都做同样的事情,所有输入都是好的,直到行的最后一个位置。如果它是最后一行,则最后一个位置保持良好状态。
我会在这里发布代码,如果有人可以给我任何指示,指出要解决这个方向我会很感激。 (以及关于清理其余部分的任何指示,它的功能,但我确信它不是经验丰富的眼睛。)
罪魁祸首就在这里我相信
for(j=0; j < Rows_1; ++j){
for(i=0; i < Columns_1; ++i){
printf("\nEnter the value for row %d column %d=",j+1,i+1);
/*fgets(input, sizeof(input)-1, stdin);
sscanf("%d", &Matrix_1[j][i]);*/
scanf("%d",&Matrix_1[j][i]);
}
}
整个代码在这里
//HW5....Program for Matrix Multiplication....
int main(void){
//first we will verify that the two matrices can be mulitiplied by comparing rows and columns....
static int Rows_1, Columns_1, Rows_2, Columns_2;
int i, j, k, l, m, n, p, q;
//char input[4];
//call for user input to define size of matrix 1 and matrix 2
printf("Please enter the size of the first matrix you wish to multiply...\n# of Rows=");
scanf("%d",&Rows_1);
printf("# of Columns=");
scanf("%d",&Columns_1);
printf("Please enter the size the second matrix you wish to multiply...\n# of Rows=");
scanf("%d",&Rows_2);
printf("# of Columns=");
scanf("%d",&Columns_2);
//defining the size of the matrices using inputted values (-1 because arrays count 0 as a row.)
int Matrix_1[(Rows_1-1)][(Columns_1-1)],Matrix_2[(Rows_2-1)][(Columns_2-1)];
if(Rows_2==Columns_1){ //checking if the two matrices are compatible in size to be multiplied
printf("\nYou are attempting to multiply a %d x %d matrix with a %d x %d matrix",Rows_1, Columns_1, Rows_2, Columns_2);
printf("\nThe resulting matrix will be %d x %d",Rows_1, Columns_2);
for(j=0; j < Rows_1; ++j){
for(i=0; i < Columns_1; ++i){
printf("\nEnter the value for row %d column %d=",j+1,i+1);
/*fgets(input, sizeof(input)-1, stdin);
sscanf("%d", &Matrix_1[j][i]);*/
scanf("%d",&Matrix_1[j][i]);
}
}
//printf("%d %d %d %d",Matrix_1[0][0],Matrix_1[0][1],Matrix_1[1][0],Matrix_1[1][1]);
/* for(k=0; k < Rows_2; k++){
for(l=0; l < Columns_2; l++){
printf("Enter the value for row %d column %d",k+1,l+1);
scanf("%d",&Matrix_2[k][l]);
}
}*/
printf("Matrix 1 =\n");
for(p=0; p < Rows_1; ++p){
for(q=0; q < Columns_1; ++q){
printf("%d ",Matrix_1[p][q]);
}
printf("\n");
}
/* printf("Matrix 2 =/n");
for(m=0; m < Rows_2; m++){
for(n=0; n < Columns_2; n++){
printf("%d ",Matrix_2[m][n]);
}
printf("\n");
}
*/
}
else{
printf("\nThe two matrices entered cannot be multiplied together.");
}
;
getchar();
return 0;
}
感谢您的期待!
答案 0 :(得分:3)
你的问题在这里:
//defining the size of the matrices using inputted values (-1 because arrays count 0 as a row.)
int Matrix_1[(Rows_1-1)][(Columns_1-1)],Matrix_2[(Rows_2-1)][(Columns_2-1)];
你不应该使用“-1”。虽然数组从0开始计数,并且它们以“n-1”结尾,但它们必须声明为“n”:
int Matrix_1[Rows_1][Columns_1],Matrix_2[Rows_2][Columns_2];
答案 1 :(得分:2)
int Matrix_1[(Rows_1-1)][(Columns_1-1)],Matrix_2[(Rows_2-1)][(Columns_2-1)];
应该是
int Matrix_1[Rows_1][Columns_1], Matrix_2[Rows_2][Columns_2];
因为您希望有两个大小为Rows_1 x Columns_1
和Rows_2 x Columns_2
的矩阵。