c - 在具有不同宽度文件的 C 中使用 fscanf

标签 c scanf

我需要编写一个程序来读取各种文件并将信息存储到数组中。我将使用 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/

相关文章:

c - C 中使用递归函数的正弦值

objective-c - sizeof() 不适用于传递给 GLfloat[] 数组的引用

c - Fwrite/Fread 动态声明的结构 **

C 段错误 : fscanf in a function

c - 为什么我可以有冲突的函数原型(prototype)和同名定义?

c - 如何在 Windows 上绘制突出显示/选定的位图?

c - 您将如何使用 scanf() 来扫描您之前创建的值?

c - 在 scanf 中多次使用相同的整数

c - scanf() 将换行符留在缓冲区中

c - 如何使 scanf() 一次扫描一位整数?