我必须从txt文件及其元素读取矩阵的行数和列数。第一行是行数和列数,其后是数字。例如,这是具有2行3列的矩阵(包含123 456)和具有3行2列的矩阵。 2 3 1 2 3 4 5 6。 3 2 1 2 3 4 5 6 我要做的是从同一个文本文件中读取两个矩阵并将它们相乘。我遇到一些未知的问题。
当我编写代码以测试矩阵是否正确填充时。我只得到第一个矩阵打印,然后程序停止。输出:1 2 3 4 5 6
这是代码的一部分。提前致谢。
fn example(name: &mut str) {
name.make_ascii_uppercase()
}
}
答案 0 :(得分:0)
我认为我已经解决了这个问题,但是由于存在很多段错误,我不得不进行大量调试,因此我将原始问题的答案放在顶部,并将所有我不得不调试的事情推迟到底部。
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的调用次数不代表已建立索引的嵌套Arary的数量,因此我不得不更改矩阵的声明,它们的填充方式以及它们的引用方式。
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");
}
请记住,如果要在数组内部引用数组,则需要在原始数组的每个插槽中为另一个数组分配空间。我选择了不直观的矩阵算术方法,但是可以对代码进行扩展以轻松地使用双数组索引。
答案 1 :(得分:0)
分配2D数组时遇到一些问题:
例如:
mat1=malloc(row1 * col1 * sizeof(int*));//create memory for first matrix
应该是
mat1=(int**)malloc(row1 * sizeof(int*));//create memory for first matrix
然后应将mat1
中的每一行分配给矩阵中每个单元格scanf
之前
for (i = 0; i < row1; i++)
{
mat1[i] = malloc(col1 * sizeof(int));
for (j = 0; j < col1; j++)
{
fscanf(file, "%d", &mat1[i][j]);
}
}
然后,对mat2
做类似的事情
这是我基于原始问题的解决方案:
#include <stdio.h>
#include <stdlib.h>
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 = (int **)malloc(row1 * sizeof(int*));//create memory for first matrix
//reading data for first matrix
for (i = 0; i < row1; i++)
{
mat1[i] = malloc(col1 * sizeof(int));
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 = (int **)malloc(row2 * sizeof(int*));//create memory for second matrix
//reading data for second matrix
for (i = 0; i < row2; i++)
{
mat2[i] = malloc(col2 * sizeof(int));
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");
}
fclose(file);
return 0;
}