Отсортировать структуры по одному из полей - C (СИ) (74990)
Формулировка задачи:
Есть программа, пользователь вводит 4 поля данных, для пяти разных товаров и они записываются в файл.
Как можно отсортировать данные,например, по году выпуска ?
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <conio.h> void main() { struct tovari { char name[10]; char cena[10]; char year[10]; char kol[10]; }; struct tovari tovari[6]; int i; char tmp; FILE *output; output=fopen("rez.txt","w"); for (i=1;i<=5;i++) { printf("Nazvanie %d tovara\n",i); scanf("\n%s",tovari[i].name); printf("Cena\n"); scanf("\n%s",tovari[i].cena); printf("God\n"); scanf("\n%s",tovari[i].year); printf("Kolichestvo\n"); scanf("\n%s",tovari[i].kol); } for (i=1;i<=5;i++) { fprintf(output,"%d-Tovar:\n",i); fprintf(output,"%s\n",tovari[i].name); fprintf(output,"%s\n",tovari[i].cena); fprintf(output,"%s\n",tovari[i].year); fprintf(output,"%s\n",tovari[i].kol); } }
Решение задачи: «Отсортировать структуры по одному из полей»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> struct tovari { char name[10]; char cena[10]; char year[10]; char kol[10]; }; int Compare(const void* first, const void* second) { return strcmp(((struct tovari*)first)->year, ((struct tovari*)second)->year); } int main() { struct tovari tovari[5]; int i; FILE* output; output = fopen("rez.txt", "w"); for (i = 0; i < 5; i++) { printf("Nazvanie %d tovara\n", i + 1); scanf("\n%s", tovari[i].name); printf("Cena\n"); scanf("\n%s", tovari[i].cena); printf("God\n"); scanf("\n%s", tovari[i].year); printf("Kolichestvo\n"); scanf("\n%s", tovari[i].kol); } qsort(tovari, 5, sizeof(struct tovari), Compare); for (i = 0; i < 5; i++) { fprintf(output, "%d-Tovar:\n", i + 1); fprintf(output, "%s\n", tovari[i].name); fprintf(output, "%s\n", tovari[i].cena); fprintf(output, "%s\n", tovari[i].year); fprintf(output, "%s\n", tovari[i].kol); } fclose(output); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляется структура
tovari
с полями name, cena, year, kol - Создается функция сравнения Compare, которая будет использоваться в функции сортировки qsort
- В функции main создается массив структур tovari, инициализированный нулевыми значениями
- Открывается файл
rez.txt
в режиме записи - В цикле запрашиваются значения полей структуры tovari и сохраняются в соответствующих переменных
- Вызывается функция qsort для сортировки массива tovari по полю year с использованием функции сравнения Compare
- В цикле выводятся отсортированные значения полей структуры tovari в файл
rez.txt
- Файл
rez.txt
закрывается - Возвращается 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д