【问题标题】:Sorting data on text file in C在C中对文本文件中的数据进行排序
【发布时间】:2018-08-26 15:53:50
【问题描述】:

我发现了这个练习,我必须创建一个数据结构,读取一些输入,将输入存储在“适当的”数据结构中,然后将所有内容打印到一个文本文件中。

我期待添加一个按星级排序酒店列表的功能,所以如果一家酒店有 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   
   } 
} 

【问题讨论】:

标签: c arrays data-structures file-handling


【解决方案1】:

我建议创建一个结构类型来表示一家酒店,然后创建一个结构类型实例的数组。例如类型可以如下。

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

struct Hotel hotels[NRHOTELS];

现在您可以实现一个排序函数,该函数根据hotels[i].starshotels 数组进行排序。当然,这是一个非常简单的实现,它具有硬编码的 HOTELNAMESIZE 和 NRHOTELS 值,但可能是一个不错的起点。

【讨论】:

  • 所以,在酒店[NRHOTELS];每个元素都是一个数据结构?例如hotels[NRHOTELS] = ["**** hotel1", "*** hotel two" .... ] ?
  • 我如何将变量保存到数组中?使用我在实际程序中使用的相同系统?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2016-01-01
  • 2013-03-16
  • 2018-05-08
  • 2013-06-06
  • 2017-07-05
相关资源
最近更新 更多