Сортировка структуры из текстового файла. 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, то структура добавляется в массив.
- Если данные некорректны (не удалось считать все четыре поля), выводится сообщение об ошибке и цикл прерывается.
- Если данных больше, чем нужно (считано больше четырех полей), выводится сообщение об ошибке и цикл прерывается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д