2

我是 C 和一般编程的初学者(我已经用 C/C++ 编程两年了),我做过的唯一类型的程序是命令行数学处理器,它接受参数并对它们进行操作。没有根据输入的内容来分叉要做什么。我不知道如何做这样的事情,所以我最近一直在做的是以如下方式设计我的程序:

printf("What feature to use?");
int response;
scanf("%d", response);
if (response == 1)
{
     feature01();
}
if (response == 2)
{
     feature02();
}

……我就这样继续下去。对于我的程序通常只有不到 10 个独特的功能,这是可以的,但只是暂时的。如果我曾经编写过具有 50-100 个独特分支功能的程序,那么可能会出现问题。如何在不使用上述方式的 if 语句的情况下处理输入并分支到不同的功能?

4

2 回答 2

3

在许多情况下,您可以将一系列if关于互斥值的语句替换为:switch

switch (response)
{
    case 1:
        feature01();
        break;
    case 2:
        feature02();
        break;
    default:
        featureXX();
        break;
}

这大致相当于:

if (response == 1)
{
    feature01();
}
else if (response == 2)
{
    feature02();
}
else
{
    featureXX();
}

...除了编译器可以优化switch一点。

于 2013-06-09T22:03:36.447 回答
2

您可以创建一个函数表。首先,一个typedef

typedef void (*feature)();

featurenow 代表一个指向不带参数并返回的函数的指针void

现在,编写(并注意索引更改)

void feature0() {...}
void feature1() {...}
// ...
void feature9() {...}

然后将它们放入一个数组中:

feature[] actions = {&feature0, &feature1, ..., &feature9};

然后您的代码变为(省略了错误检查):

printf("What feature to use?");
int response;
scanf("%d", &response);
actions[response]();

指向函数的指针在调用时被视为实际函数。

于 2013-06-09T22:14:20.150 回答