|
ユーザーが、並べ順を指定したらそのように並び変わるようにしようと思って
作成していました。
しかし、if文ばかりの長文になってしまいました。
このような場合に、式を簡潔に書く方法ってありますか?
追加
typedef struct
{
char personno[9]; /*馬番号*/
char simei[61]; /*馬名*/
char ksimei[31]; /*馬カナ名*/
char size[26]; /*馬体重*/
long dekasa; /* char型以外の方法を試すため */
}PersonMaster;
static char nyuuryoku[100];
void main()
{
int i;
/*構造体配列&初期化*/
PersonMaster wk_person[] = {
{"00000001","ナリタブライアン","ナリタブライアン","500",200},
{"00000003","マヤノトップガン","マヤノトップガン","498",40},
{"00000005","ジェニュイン","ジェニュイン","500",40},
{"00001001","サクラチトセオー","サクラチトセオー","420",40},
{"00010001","メジロライアン","メジロライアン","420",40},
{"00000100","グラスワンダー","グラスワンダー","420",40},
{"00000099","タイキシャトル","タイキシャトル","420",500},
{"00000010","エアグルーヴ","エアグルーヴ","420",9800},
{"00000022","サイレンススズカ","サイレンススズカ","380",400},
{"00000009","サニーブライアン","サニーブライアン","500",400},
};
scanf("%s",&nyuuryoku);
/* ソート関数 */
int st_size(const void *a, const void *b)
{
const PersonMaster* x = ( PersonMaster* )a;
const PersonMaster* y = ( PersonMaster* )b;
int hikaku;
int i; /* 添え字 */
/* 数値を比較 */
if(nyuuryoku[i] == 'd')
{
if(x->dekasa < y->dekasa)
{
hikaku = -1;
}
else if(x->dekasa > y->dekasa)
{
hikaku = 1;
}
else
{
hikaku = 0;
}
if (hikaku != 0)
{
return hikaku;
}
i++;
if(nyuuryoku[i] == '\0')
{
return hikaku;
}
if(nyuuryoku[i] == 's')
{
hikaku = strcmp(x->size,y->size);
if(hikaku != 0)
{
return hikaku;
}
i++;
if(nyuuryoku[i] == '\0')
{
return hikaku;
}
if(nyuuryoku[i] == 'p')
{
hikaku = strcmp(x->personno,y->personno);
if(hikaku != 0)
{
return hikaku;
}
i++;
if(nyuuryoku[i] == '\0')
{
return hikaku;
}
}
else if(nyuuryoku[i] == 'n')
{
hikaku = strcmp(x->name,y->name);
if(hikaku != 0)
{
return hikaku;
}
i++;
if(nyuuryoku[i] == '\0')
{
return hikaku;
}
}
}
以下、同じように全方法を調べる・・・。
|