【发布时间】:2021-01-20 22:06:02
【问题描述】:
我正在开发一个程序,该程序从 .dat 文件中读取 5x5 矩阵,执行少量任务并将这些任务的输出保存到单独的文件中。目前我有两个功能。一种用于从文件中读取并在控制台中显示值。还有一个用于将值保存在文件中。
我的问题是,当我将它们放在 main 中时,这两个工作正常,但是当我将它们作为函数调用时,只有 read_matrix() 正确,而 write_matrix() 只会创建空白 Result.dat。我认为这是因为当它们都在 main 中时,在读取矩阵后,所有值都在内存中并且可以写入文件。当我将它们称为函数时, write_matrix 在 A[] 中没有任何值,也没有给我任何东西。我尝试创建另一个数组来保存这些值,弄乱了指针(我对它们不太熟悉),但没有任何效果,而且我没有想法。
-
我该如何解决?如何将整个值数组从第一个函数传递给另一个函数?
-
如何让程序确定尺寸。我必须使用的矩阵是 5x5,但我希望能够将此程序与其他尺寸一起使用。目前我提示用户输入高度和宽度,但它远非完美,如果我输入不正确的尺寸输出是错误的。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int read_matrix(FILE * fin, int ** A, int x, int y) {
fin = fopen("mat_A.dat", "r");
if (fin == NULL)
printf("Error opening input file. \n");
else {
printf("Number of columns:\n");
scanf("%d", & x);
printf("Number of rows:\n");
scanf("%d", & y);
// Read the matrix dimensions
int ** A = (int ** ) malloc(sizeof(int * ) * x);
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
A[i] = (int * ) malloc(sizeof(int) * y);
}
}
// Allocate the memory
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
fscanf(fin, "%d", & A[i][j]);
printf("%d ", A[i][j]);
}
printf("\n");
}
fclose(fin);
}
}
int write_matrix(FILE * fout, int ** A, int x, int y) {
fout = fopen("Result.dat", "w");
// fprintf( fout, "%d %d \n", x, y );
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
fprintf(fout, "%d ", A[i][j]);
}
fprintf(fout, "\n");
}
fclose(fout);
}
int main() {
/* declaration of variables */
int x,
y,
i = 0,
**A;
FILE * fin,
* fout;
read_matrix(fin, A, x, y);
write_matrix(fout, A, x, y);
printf("\n\nlul");
free(A);
return 0;
}```
【问题讨论】:
-
read_matrix中的指针A是本地副本。在read_matrix中更改A对main中的指针A没有影响。您要么需要将A的地址传递给read_matrix,要么将A的新值从read_matrix返回并分配给A中的A。 -
您应该使用
&A或从read_matrix 返回int ** -
int ** A = (int ** ) malloc(sizeof(int * ) * x);隐藏了read_matrix函数的第二个参数int **A。 -
谢谢@user3386109。你让我走上正轨,我找到了解决方案。我不知道如何给你 dem 声望点,但谢谢。