gpt4 book ai didi

无法编译矩阵乘法

转载 作者:行者123 更新时间:2023-11-30 20:35:48 25 4
gpt4 key购买 nike

嘿,我遇到了这个错误,我尝试了 10 个解决方案,但都不起作用。我想加载 2 个矩阵,每个矩阵都来自自己的 txt 文件,然后将它们相乘。我无法编译,导致 LNK1120 和 LNK2019 错误。

这是我的代码:

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;
}

最佳答案

由于您使用的是 Visual C++,因此不存在像 getline 这样的 C 函数。 Visual C++ 附带的 C 编译器遵循 C89 规范。

使用fgets从文件中检索数据。

如果您确实想在 Visual C++(真正的 C)程序中使用 getline,您可以尝试 this code from GNU实现该功能。

关于无法编译矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37780648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com