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