Вот у меня кусок кода, а именно сортировка по возрасту
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;
}
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;
}
strcmp( stud[j].fioЗАПЯТАЯstud[j+1].fio )
например, а вообще читать больно для зрения и мозга.
http://www.cplusplus.com/reference/cstring/strcmp/
например, а вообще читать больно для зрения и мозга.
http://www.cplusplus.com/reference/cstring/strcmp/
Код полный отстой. Где операторские скобки? Где точки с запятой?
Евгений Ганчев
зачем точки с запятой в for и if ??
Читал, читал и сдался
Похожие вопросы
- Помогите с программированием СИ
- Помогите с программированием на Си
- Язык программирования Си
- Помогите пожалуйста решить задачу по программированию (язык программирования СИ)
- Как в языке программирования СИ осуществлять вызов подпрограммы, которая находится в другом файле?
- Как на языке программирования си сделать, чтобы при вводе полного бреда программа не поломалась?
- Помогите пожалуйста найти ошибку в задаче (Язык программирования Си)
- Помогите с программированием на Си. Задача про треугольники
- Помогите с программированием на си
- Привет, помогите с программированием на СИ, передача массива в функцию..