Сортировка структуры из текстового файла. Borland C для DOS. - C (СИ)
Формулировка задачи:
Помогите пожалуйста с решением задачи: необходимо создать структуру, записать ее в текстовый файл, а затем считать эти данные и отсортировать их по названию города (location), а также, по количеству дней (duration). С возможностью реализации на Borland C для DOS. Заранее спасибо.
Ниже указываю текст программы с реализованными частями задачи: объявление структуры, введение данных в текстовый файл, считывание данных из текстового файла и выведение их на экран.
Вот содержимое файла base.txt:
Листинг программы
- #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;
- }
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;
- }
- }
Объяснение кода листинга программы
- Объявляется структура bureau и массив arr из 10 элементов этой структуры.
- Инициализируются переменные asize, b, retval.
- Переменная asize инициализируется нулем.
- Цикл while считывает строки из файла, используя функцию fgets, пока не достигнет конца файла.
- Внутри цикла, каждая строка разбивается на поля, используя функцию sscanf.
- Если все четыре поля успешно считываются и индекс массива меньше 10, то структура добавляется в массив.
- Если данные некорректны (не удалось считать все четыре поля), выводится сообщение об ошибке и цикл прерывается.
- Если данных больше, чем нужно (считано больше четырех полей), выводится сообщение об ошибке и цикл прерывается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д