2016-06-13 3 views
-2

이봐, 난이 오류가있어 10 가지 해결책 중 하나를 시도하고 어느 쪽이든 작동합니다. 나는 각각의 txt 파일로부터 2 개의 행렬을 적재하고, 그 다음에는 그것들을 곱하려고한다. 나는 LNK1120과 LNK2019 오류의 컴파일을 할 수 없다.캔트 곱셈 행렬 (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++를 사용하고 있기 때문에, getline 같은 그런 C 기능은 없습니다. Visual C++와 함께 제공되는 C 컴파일러는 C89 사양을 준수합니다.

fgets을 사용하여 파일에서 데이터를 검색하십시오.

Visual C++ (실제로 C) 프로그램에서 getline을 사용하려면이 기능을 구현하는 this code from GNU을 사용해보십시오.

+0

이어야합니다.} \t char string [100]; \t while (fgets (string, 100, macierz1)) { \t \t printf ("% s \ n", 문자열); \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