Я боролся с этим в течение нескольких дней и до сих пор не могу найти его решение.
Мой текстовый файл имеет N строк, и каждая строка имеет формат:
Full_name age weight
Мне нужно прочитать этот файл и распечатать результат запроса в формате:
./find age_range weight_range order by [age/weight] [ascending/descending]
Например:
./find 30 35 60.8 70.3 order by age ascending
Моя структура:
Struct record{
char name[20];
int age;
float weight;
};
Я думаю, что чтение записей файла в структуру имеет место, но я до сих пор не могу понять, как это сделать.
Пока это мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int STEPSIZE = 100;
struct record {
char name[20];
int age;
float weight;
};
void ** loadfile(char *filename, int *len);
int main(int argc, char *argv[])
{
if(argc == 1)
{
printf("Must supply a filename to read\n");
exit(1);
}
int length = 0;
loadfile(argv[1], &length);
}
void ** loadfile(char *filename, int *len)
{
FILE *f = fopen(filename, "r");
if (!f)
{
printf("Cannot open %s for reading\n", filename);
return NULL;
}
int arrlen = STEPSIZE;
//Allocate space for 100 char*
struct record **r = (struct record**)malloc(arrlen * sizeof(struct record*));
char buf[1000];
int i = 0;
while(fgets(buf, 1000, f))
{
//Check if array is full, If so, extend it
if(i == arrlen)
{
arrlen += STEPSIZE;
char ** newlines = realloc(r, arrlen * sizeof(struct record*));
if(!newlines)
{
printf("Cannot realloc\n");
exit(1);
}
r = (struct record**)newlines;
}
//Trim off newline char
buf[strlen(buf) - 1] = '\0';
//Get length of buf
int slen = strlen(buf);
//Allocate space for the string
char *str = (char *)malloc((slen + 1) * sizeof(char));
//Copy string from buf to str
strcpy(str, buf);
//Attach str to data structure
r[i] = str;
i++;
}
*len = i; // Set the length of the array of char *
return ;
}
Пожалуйстапомогите мне улучшить его и найти решение.
Любая помощь будет оценена, спасибо.