【发布时间】:2020-02-05 14:38:57
【问题描述】:
我首先解释我的这段代码
#define __C 130.81
#define __D 146.83
#define __E 164.81
#define __F 174.61
#define __G 196.0
#define __A 220.0
#define __B 246.94
int main(int argc, char *argv[]){
double frequency = 440;
int opt;
int option_index = 0;
static struct option long_options[] =
{
{"freq", required_argument, 0, 1},
...
while ((opt = getopt_long(argc, argv, "f:v:o:hd:0:", long_options, &option_index)) != -1) {
printf("%d\n", opt);
switch (opt) {
case 1:
frequency = [[ SOLVE ME PLS ]]
break;
}
}
注意:这只是摘录,不是真正的代码。
我想要这个 CLI 是当我执行时:./bin --freq A
它将设置变量frequency = __A,如果./bin --freq D,则设置frequency = __D。就是这么简单!!
【问题讨论】:
-
其实,不,没那么简单!
-
想法1(一般但更难):构建一个内存表,您可以在其中查找例如
"D"并将其映射到 146.83。想法 2(更简单):只需使用 7 路if/else树。 -
@steve 如果你是我,你会选择什么内存和 CPU 消耗少?
-
@HarieAmjari 我建议的两个想法在内存和 CPU 方面应该几乎相同。这主要是一个你更愿意实施的问题。
-
稍微更详细一点,想法 1 看起来像
struct freqmap { char letter; float freq; };,然后是struct freqmap freqtab[] = { {'C', 130.81}, {'D', 146.83}, ... };。
标签: c command-line-interface command-line-arguments