gpt4 book ai didi

c - 如何从文件中读取矩阵?

转载 作者:行者123 更新时间:2023-12-02 04:10:05 25 4
gpt4 key购买 nike

我知道同样的问题之前已被问过一百次,但他们要么没有帮助我,要么没有得到回答。

我想读取一个文本文件,其中包含一些格式如下的整数:

1;50
2;40
3;180

这个文件可以永远存在,所以我无法创建具有固定大小的数组。到目前为止,我所做的总结部分(完整的代码不是这样的,我检查了文件是否不为空,创建了文件指针,将它们放入不同的函数中等):

int **mymatrix;
mymatrix =(int **) malloc(sizeof(int*)*1);
fscanf(file, "%d", &mymatrix[0]);
fscanf(file, ";%d", &mymatrix[1]);

并打印:

printf("%d",  *mymatrix[0]);
printf(" %d", *mymatrix[0]);

我看过一些类似的问题,并从中了解了 malloc 行。我尝试过执行 fscanf(file, "%d;%d", Something) 并用 *、**、&、&& 的每种可能组合替换某些内容,还尝试了 [0]、[1 ] 但仍然无法读取任何内容。

我的代码中不需要打印部分(也尝试了所有可能的组合,但没有运气)。我在 scanf 之后放置了断点,但 Visual Studio 将 mymatrix 显示为 <无法读取内存>。

所以,应该有一个我没有尝试过的scanf组合。如果有人能在这方面帮助我,我将不胜感激。

最佳答案

像这样:

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

int main(void) {
FILE *fp = fopen("matrix.txt", "r");
if(!fp){
perror("fopen");
return 1;
}

int d1, d2, rows = 0;
while(2 == fscanf(fp, "%d;%d", &d1, &d2))
++rows;
int **matrix = malloc(rows * sizeof(*matrix));

rewind(fp);
rows = 0;
while(2 == fscanf(fp, "%d;%d", &d1, &d2)){
matrix[rows] = malloc(2 * sizeof(**matrix));
matrix[rows][0] = d1;
matrix[rows++][1] = d2;
}
fclose(fp);
//print and free'd
for(int r = 0; r < rows; ++r){
printf("%d %d\n", matrix[r][0], matrix[r][1]);
free(matrix[r]);
}
free(matrix);
return 0;
}

重新分配版本。

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

int main(void) {
FILE *fp;
int **matrix = NULL;
int d1, d2, r, rows = 0;

fp = fopen("data.txt", "r");
if(!fp){
perror("fopen");
return 1;
}

while(2 == fscanf(fp, "%d;%d", &d1, &d2)){
matrix = realloc(matrix, (rows+1)*sizeof(*matrix));//In the case of large files increase the size that you want to extend. It must have control of the timing.
matrix[rows] = malloc(2 * sizeof(**matrix));
matrix[rows][0] = d1;
matrix[rows][1] = d2;
++rows;
}
fclose(fp);
//print and free'd
for(r = 0; r < rows; ++r){
printf("%d %d\n", matrix[r][0], matrix[r][1]);
free(matrix[r]);
}
free(matrix);
return 0;
}

关于c - 如何从文件中读取矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37147851/

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