我需要在一行中读取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);
答案 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
}
编辑我更新了代码以修复一些语法错误。现在应该可以了。