我想在下面定义每个注释的枚举:
typedef enum
{
NOTE_C0 = 0,
NOTE_CS0,
NOTE_D0,
NOTE_DS0,
NOTE_E0,
NOTE_F0,
NOTE_FS0,
NOTE_G0,
NOTE_GS0,
NOTE_A0,
NOTE_AS0,
NOTE_B0,
NOTE_C1,
NOTE_CS1,
NOTE_D1,
NOTE_DS1,
NOTE_E1,
NOTE_F1,
NOTE_FS1,
NOTE_G1,
NOTE_GS1,
NOTE_A1,
NOTE_AS1,
NOTE_B1,
NUM_NOTES
} note_t;
我想创建一个静态数组,将频率值映射到音符。
这是一项编程作业,出于某种原因,我不知道如何做到这一点。
static note_t noteList = {261.63,277.18, ...}; ?
会是这样吗?
最佳答案
只要您小心,您的建议的变体就可以在任何版本的 C: 中发挥作用
static double noteList[] = { 261.63, 277.18, … };
您需要根据枚举将频率定位在正确的索引处。稍后,您可以使用
printf("%.2f\n", noteList[NOTE_G0]);
打印中音 C 上方自然 G 对应的频率。
如果可以选择 C99 或更高版本,请考虑使用指定的初始值设定项:
static double frequencies[] =
{
[NOTE_C0] = 261.63,
[NOTE_CS0] = 277.18,
[NOTE_D0] = …,
[NOTE_DS0] = …,
…
};
我已经更恰本地重命名了数组;您将使用的符号是数组符号。即使初始值设定项列表中存在间隙,此方法也有效;您会发现它们,因为某些索引的频率为零,而您期望的是非零频率。
关于c - typedef 音符枚举,制作将频率映射到音符的静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21961279/