Я новичок в C, и я предполагаю, что мой код находится далеко от лучшей практики ..Отсортировать массив структуры с общим размером
У меня есть массив структур в моей C программе. Размер массива равен 255 (выделено), но не все из них используются.
Массив в моем eample заполняется следующим vaues:
2;a;121212;121212;0
9;c;121212;121212;1
6;d;121212;121212;1
4;e;121212;121212;1
1;v;121212;121212;1
8;x;121212;121212;1
остальное заполняется нулевыми значениями .. (я думаю)
Теперь моя проблема не с фактической сортировкой. Это когда я начну сортировку, это придет к тому, чтобы взять пустой указатель моего массива и провалиться.
массив книг:
struct book{
int ID;
char name[MAX_STR_LEN];
char dateIn[DATE_LEN];
char dateOut[DATE_LEN];
int isIn;
};
/* array of my books */
struct book books[MAX_BOOKS];
Функция сортировки:
void sort()
{
/* first find out how many indexes there are */
int h;
for (h = 0; h< MAX_BOOKS; h++)
{
if (books[h].ID == 0)
{
break;
}
}
int j = 0;
int swaped = 1;
struct book temp;
while (swaped == 1) //bubble sort on the book name
{
for(j=0;j< h ;j++)
{
swaped = 0;
if(strcmp(books[j].name,books[j + 1].name)>0)
{
//copy to temp val
temp.ID = books[j].ID;
strcpy(temp.name,books[j].name);
strcpy(temp.dateIn,books[j].dateIn);
strcpy(temp.dateOut,books[j].dateOut);
temp.isIn = books[j].isIn;
//copy next val
books[j].ID = books[j + 1].ID;
strcpy(books[j].name,books[j + 1].name);
strcpy(books[j].dateIn,books[j + 1].dateIn);
strcpy(books[j].dateOut,books[j + 1].dateOut);
books[j].isIn = books[j + 1].isIn;
//copy back temp val
books[j + 1].ID = temp.ID;
strcpy(books[j+ 1].name,temp.name);
strcpy(books[j + 1].dateIn,temp.dateIn);
strcpy(books[j + 1].dateOut,temp.dateOut);
books[j + 1].isIn = temp.isIn;
swaped = 1;
}
}
}
}
Так что мой вопрос будет, если его можно значения сорта только где ID не 0?
Если вам нужна дополнительная информация, я буду стараться доставить ..
Заранее спасибо!
Спасибо большое! Трудно было выбрать один ответ, потому что все вместе помогли мне! –