Сортировка данных по текстовому файлу в C - PullRequest
0 голосов
/ 26 августа 2018

Я нашел это упражнение, в котором мне нужно было создать структуры данных, прочитать некоторые входные данные, сохранить входные данные в «соответствующей» структуре данных и затем распечатать все в текстовом файле.

Я с нетерпением ждудобавление функции для заказа списка отелей по количеству звезд, поэтому, если отель имеет 5 звезд, он будет в верхней части списка.Возможно ли это сделать?Могу ли я сделать это с массивами?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct inputs {
   char nome[30];
   char via[30]; 
   char stars[30];
   int num;
};

int main(void)
{  

   struct inputs inputs = {"", "", ""};

   FILE *cfPtr; // cfPtr = clients.txt file pointer   
   // fopen opens file. Exit program if unable to create file 
   if ((cfPtr = fopen("clients.txt", "w")) == NULL) {
      puts("File could not be opened");
   } 
   else { 
      puts("Enter the account, name, and balance.");
      puts("Enter EOF to end input.");
      printf("%s", "? ");


      //scanf("%[^\n]s%[^\n]s%[^\n]s", inputs.via, inputs.nome, inputs.stars);



      fgets(inputs.nome, 30, stdin);
      inputs.nome[strcspn(inputs.nome,"\n")] = '\0';
      fgets(inputs.via, 30, stdin);
      inputs.via[strcspn(inputs.via,"\n")] = '\0';
      fgets(inputs.stars, 30, stdin);
      inputs.stars[strcspn(inputs.stars,"\n")] = '\0';

      inputs.num = strlen(inputs.stars);


      //printf("%s%s%s", inputs.nome, inputs.via, inputs.stars);

      // write account, name and balance into file with fprintf
      while (!feof(stdin)) {
           fprintf(cfPtr, "%s; %s; %s; %d\n", inputs.nome, inputs.via, inputs.stars, inputs.num);

           /*scanf("%[^\n]s", inputs.via);
           scanf("%[^\n]s", inputs.nome);
           scanf("%[^\n]s", inputs.stars);*/
           fgets(inputs.nome, 30, stdin);
           inputs.nome[strcspn(inputs.nome,"\n")] = '\0';
           fgets(inputs.via, 30, stdin);
           inputs.via[strcspn(inputs.via,"\n")] = '\0';
           fgets(inputs.stars, 30, stdin);
           inputs.stars[strcspn(inputs.stars,"\n")] = '\0';
           inputs.num = strlen(inputs.stars);

      }

      fclose(cfPtr); // fclose closes file   
   } 
} 

1 Ответ

0 голосов
/ 26 августа 2018

Я бы предложил создать тип структуры для представления одного отеля, а затем создать массив экземпляров типа структуры.Например, тип может быть следующим:

struct Hotel {
    uint8_t stars;
    char name[HOTELNAMESIZE];
};

struct Hotel hotels[NRHOTELS];

Теперь вы можете реализовать функцию сортировки, которая сортирует массив hotels на основе hotels[i].stars.Конечно, это очень простая реализация, которая имеет жестко заданные значения HOTELNAMESIZE и NRHOTELS, но может стать хорошей отправной точкой.

...