Итак, я открыл файл CSV и добавил его в структуру. Теперь я хочу отсортировать структуру по ее значениям U по убыванию. То, что я сделал, несколько работает, но это обмен значениями, которые не предназначены для обмена, например, x и y, но все же сортировка по U.
Моя структура -
typedef struct {
float xvalue;
float yvalue;
float uvalue;
float vvalue;
} flow_data;
int num_compare(const void *v1, const void *v2)
{
const flow_data *p1 = (flow_data *)v1;
const flow_data *p2 = (flow_data *)v2;
if (p1->uvalue < p2->uvalue)
return -1;
else if (p1->uvalue > p2->uvalue)
return +1;
else
return 0;
}
Где я запускаю код -
FILE* fp = fopen(flow_file, "r");
// Checking if the file has been read succesfully
if( fp == NULL)
{
perror("Error opening file");
exit(1);
}
char buf[500];
fgets(buf, sizeof(buf), fp); // Skip the first line
int total = 0;
flow_data d;
flow_data* dataset = NULL;
while(4 == fscanf(fp, "%f, %f, %f, %f\n", &d.xvalue, &d.yvalue, &d.uvalue, &d.vvalue))
{
dataset = realloc(dataset, sizeof(*dataset) * (total + 1));
dataset[total] = d;
total++;
}
qsort(dataset, total, sizeof(dataset), num_compare);