因此,我編碼傳統矩陣乘法C(我是一個初學者C),但由於某種原因,我的結果是不正確的,雖然我沒有看到任何眩光錯誤。我的輸入文件看起來像:矩陣乘法結果矩陣中的C - 錯誤值
第一行和第五行中的3 2和2 3表示後續矩陣中的行數和列數。結果應該是一個3x3矩陣,全部爲4s。但是,此代碼返回
-1912599044 32621 572
我傾向於認爲這可能是由於我聲明的方式矩陣。我不使用malloc,而是掃描輸入文件中的行和列值,並直接實例化所需的矩陣。我對C非常陌生,所以動態內存分配的概念還沒有100%清楚。我可能完全不符合標準,但我不確定。尤其讓我困惑的是,大約一半的矩陣返回了正確的值。爲什麼會這樣?以下是我的代碼。
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv){
int i, j, k, row1, col1, row2, col2, temp;
if(argc != 2){
printf("error\n");
exit(1);
}
FILE *file = fopen(argv[1], "r");
if(file == NULL){
printf("error\n");
exit(1);
}
//MATRIX 1
fscanf(file, " %d\t%d", &row1, &col1);
int matrix1[row1][col1];
for(i = 0; i<row1; i++){
for(j=0; j<col1; j++){
fscanf(file, "%d", &temp);
matrix1[i][j] = temp;
}
}
//MATRIX TWO
fscanf(file, " %d\t%d", &row2, &col2);
int matrix2[row2][col2];
int product[row1][col2]; //DECLARING PRODUCT MATRIX
for(i = 0; i<row2; i++){
for(j=0; j<col2; j++){
fscanf(file, "%d", &temp);
matrix2[i][j] = temp;
}
}
for(i = 0; i<row1; i++){
for(j = 0; j<col2; j++){
for(k = 0; k<col1; k++){
product[i][j] += matrix1[i][k]*matrix2[k][j]; //MULTIPLICATION STEP
}
}
}
for(i = 0; i<row1; i++){
for(j = 0; j<col2; j++){
printf("%d\t", product[i][j]); //PRINTING THE PRODUCT
}
printf("\n");
}
return 0;
}
首先,永遠不要使用任何'scanf'derivative(除'sscanf'但只有當你是* 100%確定*輸入格式正確)http://www.gidnetwork.com/b-59.html –
@ hl037_:廢話!如果你知道它的陷阱和行爲,沒有問題。 – Olaf
在這種情況下,我確定輸入格式正確。 @ hl037_ – Sara