我想使用C程序将.txt文件中的大量点的笛卡尔坐标读入矩阵或某些此类数据结构。
该文件包含
类型的内容023 435 1.0
23.5 12.5 0.2
: : : : : :
: : : : : :
依旧......
文件中大约有4000个这样的坐标。第一列表示x坐标,第二列y和第三列z坐标。每行代表一个点。我最终想根据坐标做一些计算。我只是初学者对C语言文件处理的想法。
任何想法?请尽快回复!
答案 0 :(得分:6)
首先,您可能希望使用结构来存储每个点
typedef struct {
float x;
float y;
float z;
} Point;
然后将文件读入点数组
Point *points = malloc(4000 * sizeof *points);
FILE * fp;
fp = fopen ("myfile.txt", "r");
int index = 0;
while(fscanf(fp, "%f %f %f", &points[index].x, &points[index].y, &points[index].z) == 3)
index++;
close(fp);
答案 1 :(得分:1)
使用sscanf和GNU getline。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#define MAX 5000
typedef struct coord
{
float x;
float y;
float z;
} coord;
int main(int argc, char *argv[])
{
if(argc != 2)
exit(1);
char *filename = argv[1];
char *line = NULL;
int n = 0;
FILE *coordFile = fopen(filename, "r");
coord *coords = malloc(sizeof(coord) * MAX);
if(coords == NULL)
exit(3);
int i = 0;
while(getline(&line, &n, coordFile) != -1 && i < MAX)
{
int items = sscanf(line, "%f %f %f", &coords[i].x, &coords[i].y, &coords[i].z);
if(items != 3)
exit(2);
i++;
}
fclose(coordFile);
}
答案 2 :(得分:0)
我会说fscanf? (给出一个例子)