2016-06-13 82 views
-2

嘿,我得到了這個錯誤,我嘗試了10個解決方案,並且工作。我想加載2個矩陣,每個矩陣都來自它自己的txt文件,然後將它們相乘。我不能編譯LNK1120和LNK2019錯誤的casue。這裏是我的代碼:不能編譯矩陣乘法(C)

int main(int argc, char *argv[]) 
{ 


FILE *macierz1, *macierz2, *fw; 
char *line = malloc(1000); 
int count = 0; 
macierz1 = fopen("macierz1.txt", "r"); 
    if (macierz1 == NULL) {`` 
    printf("nie można otworzyć", argv[1]); 
    exit(1); 
} 


macierz2 = fopen("macierz2.txt", "r"); 
if (macierz2 == NULL) { 
    printf("nie można otworzyć", argv[2]); 
    exit(1); 
} 

double *data = (double*)malloc(1000 * sizeof(double)); 
if (data == NULL) 
{ 
    printf("błąd lokowania pamięci"); 
    return EXIT_FAILURE; 
} 
getline(&line, &count, macierz1); 
int read = -1, cur = 0, columCount1 = 0; 
while (sscanf(line + cur, "%lf%n", &data[columCount1], &read) == 1) 
{ 
    cur += read; columCount1++; 
} 

int rowCount1 = 1; 
while (getline(&line, &count, macierz1) != -1) { rowCount1++; } 
printf("%d\n", columCount1); 
printf("%d\n", rowCount1); 

getline(&line, &count, macierz2); 
read = -1, cur = 0; 
int columCount2 = 0; 
while (sscanf(line + cur, "%lf%n", &data[columCount2], &read) == 1) 
{ 
    cur += read; columCount2++; 
} 

int rowCount2 = 1; 
while (getline(&line, &count, macierz2) != -1) { rowCount2++; } 
printf("%d\n", columCount2); 
printf("%d\n", rowCount2); 
int i = 0; 
int j = 0; 

int **mat1 = (int **)malloc(rowCount1 * sizeof(int*)); 
for (i = 0; i < rowCount1; i++) 
    mat1[i] = (int *)malloc(columCount1 * sizeof(int)); 

fseek(macierz1, 0, SEEK_SET); 

for (i = 0; i < rowCount1; i++) 
{ 
    for (j = 0; j < columCount1; j++) 
     fscanf(macierz1, "%d", &mat1[i][j]); 
} 

i = 0; 
j = 0; 

printf("\n\n"); 
//print matrix 1 
for (i = 0; i < rowCount1; i++) 
{ 
    for (j = 0; j < columCount1; j++) 
     printf("%d", mat1[i][j]); 

    printf("\n"); 
} 

i = 0; 
j = 0; 
int **mat2 = (int **)malloc(rowCount2 * sizeof(int*)); 
for (i = 0; i < rowCount2; i++) 
    mat2[i] = (int *)malloc(columCount2 * sizeof(int)); 

fseek(macierz2, 0, SEEK_SET); 

for (i = 0; i < rowCount2; i++) 
{ 
    for (j = 0; j < columCount2; j++) 
     fscanf(macierz2, "%d", &mat2[i][j]); 
} 

i = 0; 
j = 0; 

printf("\n\n"); 
//print matrix 2 
for (i = 0; i < rowCount2; i++) 
{ 
    for (j = 0; j < columCount2; j++) 
     printf("%d", mat2[i][j]); 

    printf("\n"); 
} 

i = 0; 

int **mat3 = (int **)malloc(rowCount1 * sizeof(int*)); 
for (i = 0; i < rowCount1; i++) 
    mat3[i] = (int *)malloc(columCount2 * sizeof(int)); 
i = 0; 
j = 0; 
int k = 0; 
int sum = 0; 

if (columCount1 != rowCount2) 
{ 
    puts("The number of columns in Matrix 1 is not same as the number of rows in Matrix 2"); 
    exit(1); 
} 

//multiplication of two matrices 
for (i = 0; i<rowCount1; i++) 
{ 
    for (j = 0; j<columCount2; j++) 
    { 
     mat3[i][j] = 0; 
     for (k = 0; k<columCount1; k++) 
     { 
      mat3[i][j] = mat3[i][j] + mat1[i][k] * mat2[k][j]; 
     } 
    } 
} 


//print multiplication result 
printf("\n\nResult = \n\n"); 

for (i = 0; i < rowCount1; i++) 
{ 
    for (j = 0; j < columCount2; j++) 
     printf("%d", mat3[i][j]); 

    printf("\n"); 
} 
for (i = 0; i< rowCount1; i++) 
    free(mat1[i]); 
free(mat1); 

for (i = 0; i< rowCount2; i++) 
    free(mat2[i]); 
free(mat2); 

for (i = 0; i< rowCount1; i++) 
    free(mat3[i]); 
free(mat3); 

free(data); 

return 0; 
} 
+0

你能向我們發佈有關錯誤的更多細節嗎? –

+0

您在這裏:https://scr.hu/ll47Ka – Headzik077

+0

1)請在這裏發佈錯誤,不要鏈接到其他網站。 2)選擇一種語言 - 它可以是C,也可以是C++。 – PaulMcKenzie

回答

1

由於您使用的Visual C++,有沒有這樣的C功能getline。 Visual C++附帶的C編譯器符合C89規範。使用fgets從文件中檢索數據。

如果你真的想在你的Visual C++(真正的C)程序中使用getline,你可以試試this code from GNU來實現這個功能。

+0

應該是這樣的:} \t char string [100]; (fgets(string,100,macierz1)){ \t printf(「%s \ n」,string); \t \t} ?? – Headzik077

+0

查看我的編輯。我鏈接到'getline'的GNU C實現。 – PaulMcKenzie

+0

只需要注意一點,爲getline提供的鏈接不會接近GNU getline的實際實現,因爲一次只能讀取最多255個字符,而不管它是否是完整的線。 –

0

有程序發佈在該行的最後一個流浪 ''':沒有定義

if (macierz1 == NULL) {`` 

getline 

功能。

根據需要添加包括:

#include <stdio.h> 
#include <stdlib.h> 
+0

我沒有粘貼包括他們在這裏 – Headzik077

+0

其在這裏使用getline或者它可以更好地使用fgets嗎? – Headzik077

+0

因爲'getline'沒有鏈接到你的程序,所以使用'fgets'。 – sg7