Распечатать введенные данные в виде таблицы, отсортировав их по фамилиям читателей в алфавитном порядке - C (СИ)
Формулировка задачи:
С клавиатуры ввести набор данных в форме структур, содержащих информацию о читателях библиотеки: <Фамилия, инициалы>, <Год рождения>, <Пол>, <Адрес>. Распечатать введенные данные в виде таблицы, отсортировав их по фамилиям читателей в алфавитном порядке.
Ничего больше в голову не лезет, помогите пожалуйста
Сортировка по алфавиту(кусок программы):
typedef struct LIBRARY
{
char name[30];
int birth;
char gender;
char address[30];
} mytype;
mytype reader[N];
//k - количество введенных структур
int Sort (void)
{
int i, j, code;
mytype *p1, *p2, temp;
for (i=0; i<k-1; i++)
{
p1=reader; p2=reader+1;
for (j=1; j<k-i; j++)
{
code=strcmp(p1->name, p2->name);
if (code>0)
{
temp=*p1;
*p1=*p2;
*p2=temp;
}
p1++; p2++;
}
}
return 0;
}Полный текст программы:
#include <stdio.h>
#include <iostream>
#define N 30
int InputAmount (void);
int InputStruct (void);
int OutputStruct (void);
int Sort (void);
int k;
typedef struct LIBRARY
{
char name[30];
int birth;
char gender;
char address[30];
} mytype;
mytype reader[N];
int main(int)
{
setlocale(0,"");
InputAmount();
InputStruct();
puts("============================================================================");
puts("|| List of readers: ||");
OutputStruct();
Sort();
puts("============================================================================");
puts("|| Sort list of readers: ||");
OutputStruct();
puts("|| ||");
puts("============================================================================");
system("pause");
return 0;
}
int InputAmount (void)
{
for ( ; ; )
{
printf("Enter the amount of readers: ");
if (scanf_s("%d", &k)==0)
{
printf ("\nIncorrect input! Enter the number, not a letter (symbol)! \n \n");
fflush(stdin); continue;
}
if (k<0)
{
printf("\nNumber of readers must be greater than 0! \n \n");
fflush(stdin);
}
else break;
}
puts("");
fflush(stdin);
return k;
}
int InputStruct (void)
{
int i;
for(i=0; i<k; i++)
{
printf("\nName and Surname of reader: ");
gets_s(reader[i].name);
fflush(stdin);
printf("Year of birth: ");
scanf_s("%d",&reader[i].birth);
fflush(stdin);
printf("Gender (m/f): ");
scanf("%c", &reader[i].gender);
fflush(stdin);
printf("Address: ");
gets_s(reader[i].address);
fflush(stdin);
puts("");
}
fflush(stdin);
system("cls");
return 0;
}
int OutputStruct (void)
{
int i;
puts("|| ||");
printf("|| The reader's name: Birth: Gender: Address: ||\n");
for(i=0; i<k; i++) printf("|| %-22s %-5d %-10c %18s ||\n", reader[i].name, reader[i].birth, reader[i].gender, reader[i].address);
puts("|| ||");
puts("============================================================================");
return 0;
}
int Sort (void)
{
int i, j, code;
mytype *p1, *p2, temp;
for (i=0; i<k-1; i++)
{
p1=reader; p2=reader+1;
for (j=1; j<k-i; j++)
{
code=strcmp(p1->name, p2->name);
if (code>0)
{
temp=*p1;
*p1=*p2;
*p2=temp;
}
p1++; p2++;
}
}
return 0;
}Пробовала переделать на такую функцию (сравнивала буквы, очень подозрительно, выдает ошибку):
int NewSort (void)
{
int i, j, k, r;
mytype temp, *str1, *str2;
str1=reader; str2=reader+1;
for (i=0; *reader[i].name!='0'; i++)
{
k=strlen(str1->name);
r=strlen(str2->name);
for (j=0; j<k || j<r; j++)
{
if ((str1->name[j])>(str2->name[j]))
{
temp=*str1;
*str1=*str2;
*str2=temp;
break;
}
if ((str1->name[j])<(str2->name[j])) break;
}
str1++; str2=str1+1;
}
return 0;
}Решение задачи: «Распечатать введенные данные в виде таблицы, отсортировав их по фамилиям читателей в алфавитном порядке»
textual
Листинг программы
#include <stdlib.h>
int cmp(const mytype *r1, const mytype *r2);
int main(void) {
...
qsort(reader, k*sizeof(reader[0]), sizeof(reader[0]), cmp);
...
}
int cmp(const mytype *r1, const mytype *r2) {
return strcmp(r1->name, r2->name);
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем функцию сортировки, которая будет использоваться для сортировки данных
- В функции main() создаем массив reader типа mytype и инициализируем его данными о читателях
- Используем функцию qsort() для сортировки массива reader по функции сравнения cmp()
- В функции cmp() сравниваем поля name массива mytype
- Возвращаем результат сравнения
- В функции main() продолжаем работу с отсортированным массивом reader