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

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

Вот у меня кусок кода, а именно сортировка по возрасту

void sort() // сама сортировка
{

for(i=n-1;i>0;i--)for(int j=0;j< i;j++)
if(strcmp(stud[j].fio>stud[j+1].fio)>0)
s=stud[j],stud[j]=stud[j+1],stud[ j+1]=s;
}

при компиляции выдает такие ошибки

11IntelliSense: слишком мало аргументов в вызове функцииc:\Users\апап\Desktop\ПИНЖ\Алгоритмы и структуры данных\Дин, Структ 1\Дин, Структ 1\Исходный код. cpp64
13IntelliSense: отсутствует оператор "=", соответствующий этим операндам
типы операндов: student = intc:\Users\апап\Desktop\ПИНЖ\Алгоритмы и структуры данных\Дин, Структ 1\Дин, Структ 1\Исходный код. cpp65
12IntelliSense: не существует подходящей функции преобразования из "student" в "int"c:\Users\апап\Desktop\ПИНЖ\Алгоритмы и структуры данных\Дин, Структ 1\Дин, Структ 1\Исходный код. cpp65
10IntelliSense: аргумент типа "bool" несовместим с параметром типа "const char *"c:\Users\апап\Desktop\ПИНЖ\Алгоритмы и структуры данных\Дин, Структ 1\Дин, Структ 1\Исходный код. cpp64
Ошибка9error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа "int" (или приемлемое преобразование отсутствует) c:\users\апап\desktop\пинж\алгоритмы и структуры данных\дин, структ 1\дин, структ 1\исходный код. cpp65
Ошибка7error C2660: strcmp: функция не принимает 1 аргументовc:\users\апап\desktop\пинж\алгоритмы и структуры данных\дин, структ 1\дин, структ 1\исходный код. cpp64
Ошибка8error C2440: =: невозможно преобразовать "student" в "int"c:\users\апап\desktop\пинж\алгоритмы и структуры данных\дин, структ 1\дин, структ 1\исходный код. cpp65

кто знает как исправить, пожалуйуста!
stud[j] = stud[j+1] // тут вы пытаетесь присвоить одной структуре вторую, чего в Си делать нельзя не под каким соусом. Требуется присваивать поля структуры.

s.fio = stud[j].fio;
s.group = stud[j].group;
s.year = stud[j].year;

stud[j].fio = stud[j + 1].fio;
stud[j].group = stud[j + 1].group ;
stud[j].year = stud[j + 1].year ;

stud[j + 1].fio = s.fio;
stud[j + 1].group = s.group;
stud[j + 1].year = s.year;

Но и это неправильно! ! Во-первых, такая архитектура гарантирует вам выход за пределы массива. Во-вторых, она громоздкая. Если полей будет полторы тысячи?

Далее.. .

strcmp(stud[j].fio > stud[j+1].fio) // кошмар!

Функция strcmp принимает в качестве параметров два указателя и производит посимвольное сравнение двух строк. А у вас там операция сравнения вставлена. Если строки равны, функция strcmp возвращает 0, иначе 1, если не совпавший символ первого параметр больше и наоборот, -1, если меньше. То есть это может быть как положительное, так и отрицательное число.

Поэтому рекомендую реализовать вашу идею с помощью указателей. Дёшево и сердито!

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

#define MAX_FIO 32
#define MAX_SIZE 4

typedef struct {
    char fio[MAX_FIO];
} student;

student students[MAX_SIZE];

void usort();
void uswap(student *, student *);

int main() {
    int n;
    for (n = 0; n < MAX_SIZE; n++) {
        printf("%i > ", n + 1);
        fflush(stdin);
        scanf_s("%[^\n]s", students[n].fio, MAX_FIO);
    }
    usort();
    for (n = 0; n < MAX_SIZE; n++) printf("%s\n", students[n].fio);
    _getch();
    return 0;
}
void usort() {
    int n, m;
    for (n = 1; n < MAX_SIZE; n++)
        for (m = 0; m < MAX_SIZE - n; m++)
            if (strcmp(students[m].fio, students[m + 1].fio) > 0)
                uswap(&students[m], &students[m + 1]);
}
void uswap(student * a, student * b) {
    student tp;
    tp = *a;
    *a = *b;
    *b = tp;
}
SM
Spot Mc...
71 001
Лучший ответ
strcmp( stud[j].fioЗАПЯТАЯstud[j+1].fio )
например, а вообще читать больно для зрения и мозга.

http://www.cplusplus.com/reference/cstring/strcmp/
Код полный отстой. Где операторские скобки? Где точки с запятой?
Евгений Ганчев зачем точки с запятой в for и if ??
Читал, читал и сдался