是否有不同的方式来处理“如果”语句以外的输入?

时间:2013-06-09 22:00:05

标签: c logic

我是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语句的情况下处理输入和分支到不同的功能?

2 个答案:

答案 0 :(得分: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之外。

答案 1 :(得分:2)

您可以创建一个功能表。首先是typedef

typedef void (*feature)();

feature现在代表一个指向函数的指针,该函数不带参数并返回void

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

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

然后把它们放到一个数组中:

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

然后你的代码变成了(错误检查遗漏):

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

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