Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言对文本文件中的数据进行排序_C_Arrays_Data Structures_File Handling - Fatal编程技术网

用C语言对文本文件中的数据进行排序

用C语言对文本文件中的数据进行排序,c,arrays,data-structures,file-handling,C,Arrays,Data Structures,File Handling,我发现这个练习需要创建一个数据结构,读取一些输入,将输入存储在“适当”的数据结构上,然后将所有内容打印到文本文件中 我期待着添加一个功能,根据星级编号来订购酒店列表,因此如果一家酒店有5星级,它将位于列表的顶部。有可能吗?我可以用数组来做吗 #include <stdio.h> #include <stdlib.h> #include <string.h> struct inputs { char nome[30]; char via[30];

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

我期待着添加一个功能,根据星级编号来订购酒店列表,因此如果一家酒店有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   
   } 
} 
#包括
#包括
#包括
结构输入{
char-nome[30];
字符通过[30];
炭星[30];
int-num;
};
内部主(空)
{  
结构输入输入={“”,“”};
FILE*cfPtr;//cfPtr=clients.txt文件指针
//fopen打开文件。如果无法创建文件,请退出程序
if((cfPtr=fopen(“clients.txt”,“w”))==NULL){
puts(“无法打开文件”);
} 
否则{
看跌期权(“输入账户、名称和余额”);
puts(“输入EOF结束输入”);
printf(“%s”和“?”);
//scanf(“%[^\n]s%[^\n]s%[^\n]s”,inputs.via,inputs.nome,inputs.stars);
fgets(输入。nome,30,标准DIN);
inputs.nome[strcspn(inputs.nome,“\n”)]='\0';
fgets(输入通道,30,标准输入);
inputs.via[strcspn(inputs.via,“\n”)]='\0';
fgets(输入,30,标准输入);
inputs.stars[strcspn(inputs.stars,“\n”)]='\0';
inputs.num=strlen(inputs.stars);
//printf(“%s%s%s”,inputs.nome,inputs.via,inputs.stars);
//使用fprintf将帐户、名称和余额写入文件
而(!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(输入。nome,30,标准DIN);
inputs.nome[strcspn(inputs.nome,“\n”)]='\0';
fgets(输入通道,30,标准输入);
inputs.via[strcspn(inputs.via,“\n”)]='\0';
fgets(输入,30,标准输入);
inputs.stars[strcspn(inputs.stars,“\n”)]='\0';
inputs.num=strlen(inputs.stars);
}
fclose(cfPtr);//fclose关闭文件
} 
} 

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

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

struct Hotel hotels[NRHOTELS];

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

您可能想了解一下。请阅读我对qsrot不是很熟悉,我可能想使用冒泡排序算法,是的,我正在删除!feof ASAP只需使用
int8
t而不是
char-stars[30]。两者之间有什么区别@kiranBiradarSo,在酒店[NRHOTELS];每个元素都将是一个数据结构?例如hotels[NRHOTELS]=[“*****hotel1”、“***hotel two”…]?如何将变量保存到数组中?用我在实际程序中使用的同一个系统?