如何使用fread()读取一行中的2个整数?

时间:2016-11-22 03:09:27

标签: c fread

我需要在一行中读取2个整数,并以某种方式存储它们以计算两个坐标之间的距离。

这些代码将以二进制形式提供。

3
122 188
222 288
322 388

3是文件中的坐标数。

(122)是x coor,(188)是y coor。

到目前为止我的目标

FILE* fp = fopen(argv[1], "rb");

int points;
long numbytesread=0;

numbytesread= fread(&points, sizeof(int), 1, fp);

1 个答案:

答案 0 :(得分:1)

如果你有二进制格式,你可能最终会创建一个数据结构(struct或某种类型的简单数组),它将保存示例中由一行代表的二进制内容。 / p>

现在假设格式在内存中只是彼此相邻的整数,以下程序应该可以工作。

#include <stdio.h>  // printf
#include <stdlib.h> // malloc
#include <stdint.h> // standard int sizes (eg: int16_t, 16bit integer)

typedef int16_t coordinate[2]; // just two integers, but convenient

int main(int argc, char ** argv){
    FILE * fp = fopen(argv[1], "rb");
    int16_t number_of_coordinates = 0;

    // read number of coordinates into our variable
    fread(&number_of_coordinates, sizeof(int16_t), 1, fp);
    printf("%d\n", number_of_coordinates);

    // allocate space for our coordinates;
    coordinate * coordinates = malloc(sizeof(coordinate) * number_of_coordinates);

    // read all the coordinates at once
    fread(coordinates, sizeof(coordinate), number_of_coordinates, fp);

    // print them out just to prove it worked
    int i;
    for (i = 0; i < number_of_coordinates; i++){
        printf("%d %d\n", coordinates[i][0], coordinates[i][1]);
    }

    free(coordinates); // always free what you malloc
    fclose(fp);        // always close what you open
}

编辑我更新了代码以修复一些语法错误。现在应该可以了。