【问题标题】:Getting column data from file stream in C从C中的文件流中获取列数据
【发布时间】:2020-05-11 12:31:03
【问题描述】:

我有一个用一列数据写入的文件(例如,"250\n 249\n..."。实际上,有 250 行数据,一行最多 15 位)。我希望从不同的文件中获取数据并对它们进行平均。但是,我不知道如何用单列获得如此大量的数据。我尝试了以下方法:

char str[80];\newline
FILE * abc;
abc=fopen("bromo.dat", "r");
fgets(str, 80, msd);
atof(str);

我得到的只是第一行的数据。剩下的数据怎么弄?

【问题讨论】:

    标签: c filestream fgets


    【解决方案1】:

    您可以使用strtok 以空格字符分隔每行中的数字。然后使用您在代码中使用的atof 函数将字符串转换为浮点数。

    您应该使用二维数组来存储文件中的所有数字,并使用另一个数组来存储每一行​​中的数字:

     float number[250][15]; // maximum 250 line with at most 15 digits in each line
     int number_each_line[250] = {0}; // the number of digits in each line
    

    完整的测试程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
        char str[80];
        float number[250][15];
        int number_each_line[250] = {0};
        FILE * fp;
        fp =fopen("bromo.dat", "r");
        if (!fp) {
            return -1;
        }
        int i = 0;
        while(fgets(str, 80, fp) && i < 250) {
            int j = 0;
            char *token = strtok(str, " ");
            while(token != NULL) {
                number[i][j] = atof(token);
                j++;
                token = strtok(NULL, " ");
            }
    
            number_each_line[i] = j;
            i++;
        }
        // print first 10 lines in file
        for(int k = 0; k < 10; k++) {
            for(int j = 0; j < number_each_line[k]; j++) {
                printf("%f  ", number[k][j]);
            }
            printf("\n");
        }
        fclose(fp);
    }
    

    测试的输出:

    bromo.dat:
    
    1.2 1 4 5
    2.1 2 6 7 8
    3.5 3 2 3 5.3
    2.1 4 6 7 8
    2.1 5 6 7 8
    2.1 6 6 7 8
    2.1 8 6 7 8
    2.1 9 6 7 8
    2.1 10 6 7 8
    
    ./test
    1.200000  1.000000  4.000000  5.000000                                                                                    
    2.100000  2.000000  6.000000  7.000000  8.000000                                                                          
    3.500000  3.000000  2.000000  3.000000  5.300000                                                                          
    2.100000  4.000000  6.000000  7.000000  8.000000                                                                          
    2.100000  5.000000  6.000000  7.000000  8.000000                                                                          
    2.100000  6.000000  6.000000  7.000000  8.000000                                                                          
    2.100000  8.000000  6.000000  7.000000  8.000000                                                                          
    2.100000  9.000000  6.000000  7.000000  8.000000                                                                          
    2.100000  10.000000  6.000000  7.000000  8.000000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2013-06-25
      • 2015-07-30
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多