gpt4 book ai didi

c - 从C中的txt文件打印矩阵

转载 作者:行者123 更新时间:2023-11-30 16:21:27 24 4
gpt4 key购买 nike

我必须从 txt 文件中读取矩阵的行数和列数及其元素。第一行是行数和列数,后跟其数字。例如,这是一个包含 123 456 的 2 行 3 列矩阵和一个 3 行 2 列矩阵。2 31 2 34 5 6。3 21 23 45 6我要做的就是从同一个文本文件中读取两个矩阵并将它们相乘。我遇到一些未知的问题。

当我编写代码来测试矩阵是否正确填充时。我只打印了第一个矩阵,然后程序停止了。输出:1 2 3 4 5 6

这是代码的一部分。提前致谢。

int main(){
int **mat1,**mat2,**result;
int row1,col1,row2,col2;
int i,j,k;
FILE *file;

char fname[100];

printf("enter file name\n");
scanf("%s", &fname);
file=fopen(fname, "r");

fscanf(file, "%d %d", &row1,&col1);//row of first matrix

mat1=malloc(row1 * col1 * sizeof(int*));//create memory for first matrix
//reading data for first matrix
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
fscanf(file, "%d", &mat1[i][j]);
}
}
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
printf("%d\t",mat1[i][j]);
}
printf("\n");
}
fscanf(file,"%d %d", &row2, &col2);//row of second matrix

mat2=malloc(row2 * col2 * sizeof(int*));//create memory for second matrix
//reading data for second matrix

for(i=0; i<row2; i++)
{
for(j=0; j<col2; j++)
{
fscanf(file,"%d",&mat2[i][j]);
}
}
for(i=0; i<row2; i++) //check mat2
{
for(j=0; j<col2; j++)
{
printf("%d\t",mat2[i][j]);
}
printf("\n");

}

最佳答案

我想我解决了这个问题,但是由于存在很多段错误,我必须进行大量的调试,所以我将把原始问题的答案放在顶部,并将所有必须调试的事情推迟到底部。

fscanf(file, "%*[.]"); //this is to read the period in the file
fscanf(file,"%d %d", &row2, &col2);//row of second matrix

mat2=malloc(row2 * col2 * sizeof(int*));//create memory for second matrix

通过添加一行代码,它开始为我工作,但由于下面的调试,它才开始工作。

由于对 malloc 的调用次数并不代表已索引的嵌套数组的数量,因此我必须更改矩阵的声明、它们的填充方式以及它们的引用方式。

int *mat1,*mat2;

此声明是为了使接下来的编辑生效。

//reading data for first matrix
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
fscanf(file, "%d", &(mat1[i*col1 + j]));
}
}
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
printf("%d\t",mat1[i*col1 + j]);
}
printf("\n");
}

当然,对于第二个矩阵;

//reading data for second matrix

for(i=0; i<row2; i++)
{
for(j=0; j<col2; j++)
{
fscanf(file,"%d",&(mat2[i*col2 + j]));
}
}
for(i=0; i<row2; i++) //check mat2
{
for(j=0; j<col2; j++)
{
printf("%d\t",(mat2[i*col2 + j]));
}
printf("\n");
}

请记住,如果要在数组内部引用数组,则需要在原始数组的每个槽中为另一个数组分配空间。我选择了不直观的矩阵算术方法,但可以扩展代码以轻松允许使用双数组索引。

关于c - 从C中的txt文件打印矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54855642/

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