質問
qsortを使い構造体を並べ直したいのですが、
qsort(S,3,sizeof(Shop),compareWeight);
qsort(&S[i-count],count,sizeof(Shop),compareType);の部分で構造体の値がすべて同じなのでcompareWeight関数、compareType関数の返却値が常に0になり、そのままの順番で構造体を返してほしいのですが、1つずつ前に順番が入れ替わってしまいます。解説お願いします。
該当のソースコード
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4typedef struct{ 5 int price; 6 int weight; 7 char type[20]; 8 int date; 9 char name[21]; 10}Shop; 11 12int compareWeight(const void *a,const void *b){ 13 Shop *A=(Shop *)a; 14 Shop *B=(Shop *)b; 15 return A->weight-B->weight; 16} 17int compareType(const void *a,const void *b){ 18 Shop *A=(Shop *)a; 19 Shop *B=(Shop *)b; 20 return strcmp(A->type,B->type); 21} 22int main(void){ 23 int i,n; 24 Shop S[3]={{1,10,"A",1,"a"}, 25 {1,10,"A",2,"a"}, 26 {1,10,"A",3,"a"},}; 27 qsort(S,3,sizeof(Shop),compareWeight); 28 for(i=0;i<3;i++){ 29 printf("%d %d %s %d %s\n",S[i].price,S[i].weight,S[i].type,S[i].date,S[i].name); 30 } 31 int count=1; 32 for(i=1;i<3;i++){ 33 if(S[i-1].weight==S[i].weight){ 34 count++; 35 }else{ 36 qsort(&S[i-count],count,sizeof(Shop),compareType); 37 count=1; 38 } 39 } 40 if(count!=1){ 41 qsort(&S[i-count],count,sizeof(Shop),compareType); 42 } 43 44 for(i=0;i<3;i++){ 45 printf("%d %d %s %d %s\n",S[i].price,S[i].weight,S[i].type,S[i].date,S[i].name); 46 } 47 return 0; 48} 49
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/19 02:29