|
ここの過去ログを見てqsortを使って構造体のソートを行う関数を作成しているのですが、タイトルで昇順ソートされかつ副タイトルで降順のようなソートがうまくできないのですがどなたかわかる方がいらしたらどうか教えてください。
/* sort.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "P_manage.h"
**************************************
/*P_manage.hで宣言*/
typedef struct data{
char title[50]; /* タイトル */
char sub_title[50]; /* 副タイトル */
char date[11]; /* 日付 */
char pass[50]; /* パス */
char class[50]; /* 分類 */
} record;
countも帯域変数として宣言
**************************************
int titlecmp(const void *a, const void *b){
int diff = strcmp(((record*)a)->title,((record*)b)->title);
if(diff) return diff;
return 1;
}
int subcmp(const void *a, const void *b){
int diff = strcmp(((record*)a)->sub_title ,((record*)b)->sub_title);
if(diff) return diff;
return 1;
}
int datecmp(const void *a, const void *b){
int diff = strcmp(((record*)a)->date,((record*)b)->date);
if(diff) return diff;
return 1;
}
int passcmp(const void *a, const void *b){
int diff = strcmp(((record*)a)->pass , ((record*)b)->pass);
if(diff) return diff;
return 1;
}
int classcmp(const void *a, const void *b){
int diff = strcmp(((record*)a)->class , ((record*)b)->class);
if(diff) return diff;
return 1;
}
int sort(record *p, int count){
int i;
char select[10];
printf("order:");
fgets(select,10,stdin);
i = strlen(select) - 2;
printf("%d",i);
while(i >= 0){
if(select[i] == '1'){
qsort(data, count,sizeof(record),titlecmp);
}
else if(select[i] == '2'){
qsort(data, count,sizeof(record),subcmp);
}
else if(select[i] == '3'){
qsort(data, count,sizeof(record),datecmp);
}
else if(select[i] == '4'){
qsort(data, count,sizeof(record),passcmp);
}
else if(select[i] == '5'){
qsort(data, count,sizeof(record),classcmp);
}
i--;
}
return count;
}
|