Используйте массив char
и массив double
, хорошо выровненный, и используйте strcspn
, чтобы найти индекс:
#include <string.h>
double fq_val[] = {
130.81, 146.83, 164.81, 174.61, 196.0, 220.0, 246.94, -1
};
char *fq_key =
"C" "D" "E" "F" "G" "A" "B"
;
static double get_fq(char *key){
return fq_val[strcspn(fq_key, key)];
}
Это использует -1
как "недопустимый"частота ".
Препроцессор может создать для вас массивы, определив макрос типа FQ(C, 130.81) FQ(D, 146.83) ...
для использования внутри инициализатора, а затем определив FQ(k, v)
как #k
или * 1014. *:
#define FQLIST \
FQ(C, 130.81) \
FQ(D, 146.83) \
FQ(E, 164.81) \
FQ(F, 174.61) \
FQ(G, 196.0) \
FQ(A, 220.0) \
FQ(B, 246.94)
char *fq_key =
#define FQ(k, v) #k
FQLIST
#undef FQ
;
double fq_val[] = {
#define FQ(k, v) v,
FQLIST
#undef FQ
-1
};