Не получается отсортировать... Где ошибка? (пробовал code > 0 и code < 0) все равно не выходит
int i = 1, n, k, code;
struct STUDENT temp;
for(k = 1; k < 10; k++)
for(n = 1; n < 10 - k; n++)
{
code = strcmp (student1.name, student1[i+1].name);
if(code > 0)
{
temp = student1;
student1 = student1[i+1];
student1[i+1] = temp;
}
}
printf("\nСписок, отсортированный по алфавиту: "
"\nФамилия и инициалы Группа Оценка");
for(k = 1; k < 10; k++)
{
printf("\n%s %d ", student1[k].name, student1[k].number_group);
for (int n = 0; n < 5; n++)
{
printf("%d ", student1[k].result[n]);
}
}
Другие языки программирования и технологии
Сортировка Структур по Алфавиту (Язык Си)
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#define GROUP 6
#define NAME 28
#define SIZE 1
enum msg { INPUT_NAME, INPUT_GROUP, INPUT_EVALUATION, OUTPUT_NAME, OUTPUT_GROUP, OUTPUT_EVALUATION, SORT };
struct student {
char name[NAME];
char group[GROUP];
unsigned short evaluation;
};
typedef struct student STUDENT;
int sort_function(const void * a,const void * b);
void ui(short);
void space(int);
int main() {
STUDENT students[SIZE];
size_t st;
for (st = 0; st < SIZE; st++) {
ui(INPUT_NAME); fflush(stdin); gets_s(students[st].name, NAME); fflush(stdin);
ui(INPUT_GROUP); scanf_s("%s", students[st].group);
ui(INPUT_EVALUATION); scanf_s("%hu", &students[st].evaluation); printf("\n");
}
qsort(students, SIZE, sizeof(STUDENT), sort_function);
ui(SORT);
space(NAME / 4); ui(OUTPUT_NAME); space(NAME / 2); ui(OUTPUT_GROUP); printf("\n");
for (st = 0; st < SIZE; st++) printf("%-30s%1s\n", students[st].name, students[st].group);
getchar(); getchar();
return 0;
}
int sort_function(const void * a, const void * b) { return strcmp((*(STUDENT *)a).name, (*(STUDENT *)b).name); }
void ui(short _msg) {
setlocale(LC_CTYPE, "Russian_Russia.1251");
switch (_msg) {
case INPUT_NAME: printf("Введите фамилия и инициалы: "); break;
case INPUT_GROUP: printf("Введите группу: "); break;
case INPUT_EVALUATION: printf("Введите оценку: "); break;
case OUTPUT_NAME: printf("Фамилия"); break;
case OUTPUT_GROUP: printf("Группа"); break;
case OUTPUT_EVALUATION: printf("Оценка"); break;
case SORT: printf("Список, отсортированные в алфавитном порядке: \n"); break;
} setlocale(LC_CTYPE, "Russian_Russia.866");
}
void space(int _size) { while (_size--) printf(" "); }
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#define GROUP 6
#define NAME 28
#define SIZE 1
enum msg { INPUT_NAME, INPUT_GROUP, INPUT_EVALUATION, OUTPUT_NAME, OUTPUT_GROUP, OUTPUT_EVALUATION, SORT };
struct student {
char name[NAME];
char group[GROUP];
unsigned short evaluation;
};
typedef struct student STUDENT;
int sort_function(const void * a,const void * b);
void ui(short);
void space(int);
int main() {
STUDENT students[SIZE];
size_t st;
for (st = 0; st < SIZE; st++) {
ui(INPUT_NAME); fflush(stdin); gets_s(students[st].name, NAME); fflush(stdin);
ui(INPUT_GROUP); scanf_s("%s", students[st].group);
ui(INPUT_EVALUATION); scanf_s("%hu", &students[st].evaluation); printf("\n");
}
qsort(students, SIZE, sizeof(STUDENT), sort_function);
ui(SORT);
space(NAME / 4); ui(OUTPUT_NAME); space(NAME / 2); ui(OUTPUT_GROUP); printf("\n");
for (st = 0; st < SIZE; st++) printf("%-30s%1s\n", students[st].name, students[st].group);
getchar(); getchar();
return 0;
}
int sort_function(const void * a, const void * b) { return strcmp((*(STUDENT *)a).name, (*(STUDENT *)b).name); }
void ui(short _msg) {
setlocale(LC_CTYPE, "Russian_Russia.1251");
switch (_msg) {
case INPUT_NAME: printf("Введите фамилия и инициалы: "); break;
case INPUT_GROUP: printf("Введите группу: "); break;
case INPUT_EVALUATION: printf("Введите оценку: "); break;
case OUTPUT_NAME: printf("Фамилия"); break;
case OUTPUT_GROUP: printf("Группа"); break;
case OUTPUT_EVALUATION: printf("Оценка"); break;
case SORT: printf("Список, отсортированные в алфавитном порядке: \n"); break;
} setlocale(LC_CTYPE, "Russian_Russia.866");
}
void space(int _size) { while (_size--) printf(" "); }
1. разберись со счетчиками (в том числе с границами в циклах)
2.
code = strcmp (student1.name, student1[i+1].name);
замени на
code = strcmp (student1[ n ].name, student1[n+1].name);
для начала.
2.
code = strcmp (student1.name, student1[i+1].name);
замени на
code = strcmp (student1[ n ].name, student1[n+1].name);
для начала.
Похожие вопросы
- Помогите с массивом и сортировкой методом пузырька в языке Си! Прогу надо сдать в пятницу срочно, не знаю как начать!
- Сортировки, язык Си.
- Сортировка простыми вставками. Язык Си.
- Язык СИ. Массивы Ребят, как на Си написать сортировку массива от меньшего к большему?
- Помогите, пожалуйста, найти ошибку в программе сортировки стека (по убыванию ) на Си.
- Почему язык СИ такой сложный?
- Семь управляющих структур. Два способа их объединения. 28 ключевых слов. Так почему же язык Си считают сложным?
- Как в языке си удалить строку из структуры?
- Программирование на языке СИ с использованием подпрограммы-функции
- Программирование на языке Си. Нужна небольшая помощь.