Ниже приведены мои структуры и объявления qsort (которые должны быть организованы на основе nID)
РЕДАКТИРОВАТЬ:
struct items{
int nID;
int nQuantity;
int nItems;
float fPrice;
char cItemName[21];
char cCategory[21];
char cItemDesc[31];
};
struct Register{
struct items List[20];
char cID[11];
char cPassword[11];
char cAddress[31];
char cContact[16];
char cName[21];
};
int main ()
{
/*These are the contents of List[]*/
Users[nInd].List[1].nID = 1;
strcpy(Users[nInd].List[1].cItemName, "iPhoneMAXMAX");
strcpy(Users[nInd].List[1].cCategory, "Gadgettronss");
strcpy(Users[nInd].List[1].cItemDesc, "This is an iphone");
Users[nInd].List[1].nQuantity = 1;
Users[nInd].List[1].fPrice = 100;
Users[nInd].List[0].nID = 50;
strcpy(Users[nInd].List[0].cItemName, "iPhone");
strcpy(Users[nInd].List[0].cCategory, "Gadgets");
strcpy(Users[nInd].List[0].cItemDesc, "This is an iphone");
Users[nInd].List[0].nQuantity = 20;
Users[nInd].List[0].fPrice = 50;
for (i = 0; i < 2; i++)
qsort (&Users[nInd].List[i], 2, sizeof (struct Register), sort);
for (i = 0; i < 2; i++)
printf ("%11d %20s\t %15s \t % 10.2f \t\t %2d\n",
Users[nInd].List[i].nID, Users[nInd].List[i].cItemName,
Users[nInd].List[i].cCategory, Users[nInd].List[i].fPrice,
Users[nInd].List[i].nQuantity);
/*rest of the code*/
}
Идеальный результат:
Идентификатор продукта Название товара Категория Цена Количество
1 Iphone Гаджеты 50,00 20
50 IphoneMAXMAX Gadgettronss 100,00 1
Фактический выход:
50 IphoneMAXMAX Gadgettronss 100,00 1
1 Iphone Гаджеты 50.00 20
Однако моя проблема заключается в том, что при отображении содержимого List [] ничего не меняется.
Это моя функция сравнения для qsort:
int sort (const void*p, const void*q)
{
const struct Register *ip = (struct Register*)p;
const struct Register *iq = (struct Register*)q;
if (ip->List[0].nID > iq->List[1].nID)
return 1;
else if (ip->List[0].nID < iq->List[1].nID)
return -1;
else
return 0;
}