単連結リストの整列 #105 さらに分割
成績の評点に関する部分を独立させて、不必要に複雑度を増やし分かりにくくしてみる。
grade.h
#ifndef GRADE_H_INCLUDED #define GRADE_H_INCLUDED typedef struct tag_grade grade_t; extern const grade_t * const GRADE_A; extern const grade_t * const GRADE_B; extern const grade_t * const GRADE_C; extern const grade_t * const GRADE_D; extern const grade_t * const GRADE_F; /* compares g1 with g2 for order. returns a positive, zero, or a negative value as g1 > g2, g1 == g2, or g1 < g2. */ int grade_compare(const grade_t *g1, const grade_t *g2); #endif /* GRADE_H_INCLUDED */
grade.c
#include "grade.h" struct tag_grade { enum {GRADE_VAL_A = 5, GRADE_VAL_B = 4, GRADE_VAL_C = 3, GRADE_VAL_D = 2, GRADE_VAL_F = 1} grade; }; grade_t grades[] = {{GRADE_VAL_A}, {GRADE_VAL_B}, {GRADE_VAL_C}, {GRADE_VAL_D}, {GRADE_VAL_F}}; const grade_t * const GRADE_A = &grades[0]; const grade_t * const GRADE_B = &grades[1]; const grade_t * const GRADE_C = &grades[2]; const grade_t * const GRADE_D = &grades[3]; const grade_t * const GRADE_F = &grades[4]; int grade_compare(const grade_t *g1, const grade_t *g2) { if (g1->grade > g2->grade) return 1; else if (g1->grade == g2->grade) return 0; else return -1; }