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