Сортировка структуры из текстового файла. Borland C для DOS. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с решением задачи: необходимо создать структуру, записать ее в текстовый файл, а затем считать эти данные и отсортировать их по названию города (location), а также, по количеству дней (duration). С возможностью реализации на Borland C для DOS. Заранее спасибо. Ниже указываю текст программы с реализованными частями задачи: объявление структуры, введение данных в текстовый файл, считывание данных из текстового файла и выведение их на экран.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
//объявление структуры
struct bureau
{
char country[15],location[15],type[10];
int duration;
};
bureau b;
 
//запись в текстовый файл
void input (FILE *in)
{int i=0;
in=fopen("base.txt","w");
do
{
printf("Country & Location ");
scanf("%s %s",b.country,b.location);
printf("Type & duration ");
scanf("%s %d",b.type, &b.duration);
fprintf(in,"%s %s %s %d\n",b.country,b.location,b.type,b.duration);
i++;
puts("To continue [y/n]?");
}
while (getch()!='n');
fcloseall();
}
 
//считывание из текстового файла
void output (FILE *in)
{
char c[80];
clrscr();
in=fopen("base.txt","r");
while(!feof(in))
{ fgets (c,80,in);
printf("%s \n",c);
}
fcloseall();
}
 
int main(void)
{FILE *in;
clrscr();
input(in);
clrscr();
output(in);
getch();
return 0;
}
Вот содержимое файла base.txt:

UK London Tour 5 Ukraine Lviv Tour 10 USA New-York Tour 3 Russia Moscow 8 USA Washington Tour 2

вверх
вверх

Решение задачи: «Сортировка структуры из текстового файла. Borland C для DOS.»

textual
Листинг программы
    struct bureau arr[10];
    int asize;
    struct bureau b;
    int retval;
    
    asize = 0;
    while(fgets(line, sizeof line, ifp) != NULL) {
        retval = sscanf(line, "%s %s %s %d",
                        b.country, b.location,
                        b.type, &b.duration);
        if (retval == 4 && asize < 10)
            arr[asize++] = b;
        else if (retval != 4) {
            fprintf(stderr, "error: incorrect data\n");
            break;
        } else {
            fprintf(stderr, "error: excess data\n");
            break;
        }
    }

Объяснение кода листинга программы

  1. Объявляется структура bureau и массив arr из 10 элементов этой структуры.
  2. Инициализируются переменные asize, b, retval.
  3. Переменная asize инициализируется нулем.
  4. Цикл while считывает строки из файла, используя функцию fgets, пока не достигнет конца файла.
  5. Внутри цикла, каждая строка разбивается на поля, используя функцию sscanf.
  6. Если все четыре поля успешно считываются и индекс массива меньше 10, то структура добавляется в массив.
  7. Если данные некорректны (не удалось считать все четыре поля), выводится сообщение об ошибке и цикл прерывается.
  8. Если данных больше, чем нужно (считано больше четырех полей), выводится сообщение об ошибке и цикл прерывается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы