我需要编写一个程序来读取各种文件并将信息存储到数组中。我将使用 double 来执行矩阵乘法。关于文件的格式;第一行包含矩阵的大小。接下来的几行是矩阵的行,每个元素之间用空格分隔。
格式:
<number of rows> <number of columns>
<double> <double> ... <double>
<double> <double> ... <double>
.
.
.
<double> <double> ... <double>
这里有几个示例文件:
3 4
1.20 2.10 4.30 2.10
3.30 3.10 5.20 2.80
1.10 0.60 4.70 4.90
或
5 5
1.20 2.10 4.30 2.10 6.70
3.30 3.10 5.20 2.80 3.20
1.10 0.60 4.70 4.90 9.10
3.30 3.10 5.20 2.80 3.20
1.10 0.60 4.70 4.90 7.10
目前我的代码如下:
float** readFile(char* fp)
{
float** matrix = (float**)malloc(M*N*sizeof(float));
fp = fopen(fp, "r");
if (fp == NULL)
{
fprintf(stderr, "Can't open the file\n");
exit(1)
}
int i = 0;
int m, n;
fscanf(fp, "%d %d", m, n);
while (fscanf(fp, "");
{
i++;
}
fclose(fp);
return matrix;
}
我这样调用函数:
float** A = readFile(argv[1]);
显然,由于在读取文件时 fscanf 中缺少参数,这目前无法正常工作。如何使用 fscanf 将值读入矩阵?
最佳答案
修改这个函数
float** readFile(char* file)
{
FILE *fp;
float** matrix = (float**)malloc(M*N*sizeof(float));
fp = fopen(file, "r");
if (fp == NULL)
{
fprintf(stderr, "Can't open the file\n");
exit(1)
}
int i = 0;
int m, n;
fscanf(fp, "%d %d", m, n);
while (fgets(line,size(line),fp)!=NULL) //read file line by line
{
使用strtok()将行拆分为带有分隔符空格的标记
使用 strtof()将字符串转换为 float
}
fclose(fp);
return matrix;
}
关于c - 在具有不同宽度文件的 C 中使用 fscanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991354/