Сортировка списка файлов по имени, дате и размеру - C (СИ)
Формулировка задачи:
задан список файлов в папке, для каждого из которых указаны имя, расширение, размер, дата. реализовать сортировку по возрастанию и убыванию по всем характеристикам и подсчитать суммарный объём.
заполнение верно?как применить qsort?и можно выводить структуру на экран?
так структуру выведет?
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
struct str
{
char name;
char exp;
float size;
float date;
};
int main()
{
struct str a[4];
int i=0;
float j=0;
{
for(i; i < 4; i++)
printf("file #%i",i);
printf("enter name");
scanf("%c",&a[i].name);
printf("enter expansion");
scanf("%c",&a[i].exp);
printf("enter size");
scanf("%f",&a[i].size);
printf("enter date");
scanf("%f",&a[i].date);
}
{for(i=0, i < 4, i++)
j=j+a[i].size
}
printf("common size %f",j);{for(i=0, i < 4, i++)
printf("%f%c",a[i]);
}Решение задачи: «Сортировка списка файлов по имени, дате и размеру»
textual
Листинг программы
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#define STR_LEN 64
typedef struct str
{
char name[STR_LEN];
char exp[STR_LEN];
unsigned long size;
int tm_date;
} str_t;
int name_c(const void * a, const void * b){
return strcmp(((str_t*)a)->name, ((str_t*)b)->name);
}
int exp_c(const void * a, const void * b){
return strcmp(((str_t*)a)->exp, ((str_t*)b)->exp);
}
int size_c(const void * a, const void * b){
return ((str_t*)a)->size - ((str_t*)b)->size;
}
int tm_date_c(const void * a, const void * b){
return ((str_t*)a)->tm_date - ((str_t*)b)->tm_date;
}
void dump(const str_t * arr, size_t cnt){
while ( cnt-- ){
printf("%-20s%-5s%10u%10d\n", arr->name, arr->exp, arr->size, arr->tm_date);
++arr;
}
}
#define NUM_FILES 4
int main(void)
{
str_t a[NUM_FILES];
int i;
for(i=0; i < 4; i++){
printf("file #%i\n", i+1);
printf("enter name: ");
scanf("%s", a[i].name);
printf("enter expansion: ");
scanf("%s", a[i].exp);
printf("enter size: ");
scanf("%lu", &a[i].size);
printf("enter date: ");
scanf("%i", &a[i].tm_date);
}
printf("\n Unsorted \n");
dump(a, NUM_FILES);
printf("\n Sorted by name: \n");
qsort(a, NUM_FILES, sizeof(str_t), name_c);
dump(a, NUM_FILES);
printf("\n Sorted by expansion: \n");
qsort(a, NUM_FILES, sizeof(str_t), exp_c);
dump(a, NUM_FILES);
printf("\n Sorted by size: \n");
qsort(a, NUM_FILES, sizeof(str_t), size_c);
dump(a, NUM_FILES);
printf("\n Sorted by date: \n");
qsort(a, NUM_FILES, sizeof(str_t), tm_date_c);
dump(a, NUM_FILES);
/* с этим сами как-нибудь printf("common size %f",j);
а этого у меня нету getch(); */
return 0;
}
Объяснение кода листинга программы
- В начале кода определяются необходимые переменные и функции:
str_t- структура данных, представляющая файл, содержащая поля для имени файла, его расширения, размера и даты создания.name_c,exp_c,size_c,tm_date_c- функции сравнения, которые будут использоваться в функцииqsortдля сортировки массива файлов по различным критериям.dump- функция для вывода содержимого массива файлов в отсортированном виде.NUM_FILES- количество файлов, которые будут обрабатываться в программе.main- главная функция программы, в которой происходит взаимодействие с пользователем и выполнение всех необходимых операций.
- В функции
mainсоздается массивaтипаstr_tразмеромNUM_FILES. - Пользователю предлагается ввести данные для каждого файла: имя, расширение, размер и дату создания.
- Данные, введенные пользователем, сохраняются в соответствующих полях массива
a. - Выводится неотсортированный список файлов.
- Массив
aсортируется по имени файла с помощью функцииqsortи функции сравненияname_c. - Выводится отсортированный по имени файла список файлов.
- Массив
aсортируется по расширению файла с помощью функцииqsortи функции сравненияexp_c. - Выводится отсортированный по расширению файла список файлов.
- Массив
aсортируется по размеру файла с помощью функцииqsortи функции сравненияsize_c. - Выводится отсортированный по размеру файла список файлов.
- Массив
aсортируется по дате создания файла с помощью функцииqsortи функции сравненияtm_date_c. - Выводится отсортированный по дате создания файла список файлов.
- Программа завершается возвратом значения
0из функцииmain, что означает успешное выполнение программы.