Другие языки программирования и технологии

Помогите с программированием СИ

Привет всем, в общем такой вопрос, вот у меня структура студент, проходим динамические структуры. .
Я сделал программу, но не могу сделать функцию сортировки массива студентов по возрасту. .
Прошу помочь, завтра уже сдавать надо (( Заранее спасибо!

/*9. Ввести структуру СТУДЕНТ с полями ФИО, ГОД РОЖДЕНИЯ, КОД ГРУППЫ. Написать и протестировать функцию
a) добавления нового студента в массив студентов;
b) вывода на экран массива студентов;
c) поиска в массиве студентов по номеру группы;
d) сортирующую массив студентов по возрасту;. */

#include <stdio.h>
#include <conio.h>
#include <string.h>

struct student
{
char fio[30];
int chislo;
int mesec;
int year;
};

int n=3;
student *stud = new student [n];
int i=0;
int b;

void st()
{
printf("Vvedite FIO: ");
fflush(stdin);
scanf("%s", stud.fio);
printf("Vvedite chiclo: ");
scanf("%d", &stud.chislo);
printf("Vvedite mesec: ");
scanf("%d", &stud.mesec);
printf("Vvedite god: ");
scanf("%d", &stud.year);
i++;
}

void out(){
for(int m=0; m < i; m++)
{
printf("%s ", stud[m].fio);
printf("%d ", stud[m].chislo);
printf("%d ", stud[m].mesec);
printf("%d ", stud[m].year);
printf("\n");
}
}

void poisk(){
int p;
printf("Vvedite god rozhdeniya");
scanf("%d", &p);
for(int z=0; z < i; z++){
if (stud[z].year == p) printf("%s, %d, %d",stud[z].fio,stud[z].chislo,stud[z].mesec,stud[z].year);
}
}

void main()
{
int l;
do {
printf("\n");
printf("Vvedite # funkcii\n");
printf("1 - dobavlenie studenta\n");
printf("2 - vivod studentov\n");
printf("3 - poisk studenta\n");
printf("4 - sortirovka po vozrastu\n");
printf("0 - exit\n");
scanf("%d", &l);

switch(l)
{
case 1: st(); break;
case 2: out(); break;
case 3: poisk(); break;

case 0:break;
default: printf("net takoi funkcii");
}
}
while (l !=0);
getch();
}
В Си нет оператора new, вместо него используются функции malloc, calloc и realloc. А для освобождения ресурсов в динамической памяти используется функция free. Все они объявлены в заголовочном файле stdlib.h

Для того, чтобы считывать функцией scanf_s строку с пробелами, следует вначале для поля fio, в структуре, определить её размер макро константой, примерно так.. .

#define MAX_FIO 32

Затем в структуре использовать.. .

char fio[MAX_FIO];

И scanf_s для этого поля будет выглядеть так.. .

scanf_s("%[^\n]s", stud.fio, MAX_FIO);

А считывать с использованием функции fputs, вот так.. .

fputs(stud[m].fio, stdout);

Почему не подходит puts, потому что записывает в строку символ перевода строки!

А ещё в языке Си все переменные должны быть объявлены в начале блока, в котором они используются.

Для того, чтобы увидеть все свои ошибки, следует компилировать файл с расширением *.c

В задании требуется иметь три поля: ФИО, группа и год рождения. Рекомендую добавлять переменную типа целое со знаком, для определения статуса записи в массиве. 0 - не существует, 1 - существует, видимая, -1 - существует, скрытая. Но это в том случае, если записи придётся удалять из массива, то их проще просто скрыть. И, опять же преимущество, всегда можно будет отыскать и восстановить!

Для реализации символов и символьных строк на русском языке есть тип wchar_t, который по своей сути unsigned short. С его помощью реализована поддержка Unicode и продублированы все функции, которые используются для работы с типом char.
ВГ
Виталий Гончаров
82 323
Лучший ответ
Обычная пузырьковая сортировка. Сравниваешь только поля ВОЗРАСТ, а обмениваешь при необходимости пару структур полностью.
Артём Мосунов
Артём Мосунов
78 700
Ерлан Абдолдаев Да я знаю что пузырьковая, но не могу сопоставить ее с программой, или я туплю так((
Если не сложно, можешь код написать по отношению к моей программе?