Загрузка данных


/* Сортировка массива структур студент. Шаг 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;
}