/* Сортировка массива структур студент. Шаг 2 */
/* Задание. Сделать lt_name() и применить одну из,
в зависимости от введенного числа (1 - lt_age или 2 - lt_name()), остальное - ошибка */
#include <stdio.h>
#include <locale.h>
typedef struct {
int id;
int age;
char name[40];
} t_student;
int lt_age(t_student, t_student);
int lt_name(t_student, t_student);
void sort(t_student[], int, int(*)(t_student, t_student));
#define MAXN 100
int main(void) {
setlocale(LC_ALL, "");
char *fname = "data.txt";
t_student ar[MAXN];
FILE *fh = fopen(fname, "r");
if (fh == NULL) {
perror("WOW");
getchar();
return 1;
}
int choice;
scanf("%d", choice);
if (choice == 1){
}
else if(choice == 2){
}
else {
printf("ERROR");
}
int count = 0;
t_student st;
while (count < MAXN &&
3 == fscanf(fh, "%d%s%d", &st.id, st.name, &st.age)
) {
ar[count] = st;
++count;
}
// sort
sort(ar, count, lt_age);
fclose(fh);
printf("count=%d\n", count);
for (int i = 0; i < count; ++i) {
printf("%d.%s: %d\n", ar[i].id, ar[i].name, ar[i].age);
}
return 0;
}
int lt_age(t_student a, t_student b) {
return a.age < b.age;
}
int lt_name(t_student, t_student) { return 0; }
void sort(t_student ar[], int n, int(*lt)(t_student, t_student))
{
for (int i = 0; i < n-1; ++i) {
int imin = i;
for (int j = i+1; j < n; ++j) {
if (lt(ar[j], ar[imin])) { imin = j; }
}
if (i != imin) {
t_student temp = ar[imin];
ar[imin] = ar[i];
ar[i] = temp;
}
}
}