gpt4 book ai didi

c - 从文件中获取多个矩阵并将其存储在整数指针中

转载 作者:行者123 更新时间:2023-11-30 17:28:21 25 4
gpt4 key购买 nike

void read_matrices(int **A, int **B, int **C, int *m, int *n, int *p, char *file)

我想从外部文件读取两个矩阵,如下所示:

 3 
2
4
1 2
3 4
5 6
7 8 9 10
11 12 13 14

其中第一行数字是矩阵 A 的行数,数字 2 是矩阵 A 的列数和矩阵 B 的行数,第三行数字是矩阵 B 的列数。我已经尝试过获取 m、n 和 p,但出现了段错误

FILE * fp = fopen(file, "r");
char a, b, d;
char c = getc(fp);
int i = 0;
while (c != EOF) {
if (i == 0) {
a = c;
i++;
}
else if (i == 1) {
b = c;
i++;
}
else if (i == 2) {
d = c;
i++;
}
else
break;
}
fclose(fp);

最佳答案

很明显您需要一些帮助。下面的示例只是众多实现此目的的方法中的一种。 注意:并没有使读取 B 中可变数量元素的示例变得复杂,而是简单地编码为读取 4 元素,因为它们存在于数据文件。此外,fscanf 用于从文件中读取,因为每行都有可变的数字和不同的数据要读取。与逐个字符读取文件相比,这简化了代码,因为读取的信息类型是 int。通读示例(内联注释),如果您有疑问请告诉我:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv) {

int *A, *B, *C, m, n, p; /* note *C is unused */
char *file;

/* test for required filename */
if (argc < 2) {
fprintf (stderr, "\n Error: insufficient input. usage: %s filename\n\n", argv[0]);
return 1;
}

/* assign filename, open file, validate opening */
file = argv[1]; /* you don't need 'file', you can simply use argv[1] */

FILE *fp = fopen (file, "r");
if (!fp) {
fprintf (stderr, "\n Error: file open failed for file '%s'\n\n", argv[0]);
return 1;
}

/* read & output m, n, p */
fscanf (fp, "%d\n%d\n%d\n", &m, &n, &p);
printf ("\n m: %d\n n: %d\n p: %d\n\n", m, n, p);

/* allocate memory for A and set values to null */
A = calloc (m * 2, sizeof(int));

/* read A */
int i = 0;
for (i = 0; i < m; i++)
fscanf (fp, "%d %d\n", &A [i*2], &A[i*2 + 1]);

/* output A */
printf ("Array A\n");
for (i = 0; i < m; i++)
printf (" [ %d %d ]\n", A [i*2], A[i*2 + 1]);

/* allocate memory for B and set values null */
B = calloc (n * p, sizeof(int));

/* read B */
for (i = 0; i < n; i++)
fscanf (fp, "%d %d %d %d\n", &B [i*p], &B[i*p + 1], &B[i*p + 2], &B[i*p + 3]);

/* output B */
printf ("\nArray B\n");
for (i = 0; i < n; i++)
printf (" [ %2d %2d %2d %2d ]\n", B [i*p], B[i*p + 1], B[i*p + 2], B[i*p + 3]);

printf ("\n");

/* close FP & free allocated memory */
fclose (fp);
if (A) free (A);
if (B) free (B);

return 0;
}

输出:

$ ./bin/rmf dat/array.dat

m: 3
n: 2
p: 4

Array A
[ 1 2 ]
[ 3 4 ]
[ 5 6 ]

Array B
[ 7 8 9 10 ]
[ 11 12 13 14 ]

关于c - 从文件中获取多个矩阵并将其存储在整数指针中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070564/

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