所以我在这里工作。
{
int Test;
void (*functions[5])() = {
return,
one,
two,
three,
four
};
for (Test = takeInput(5);; Test = takeInput(5)){
cls();
Print(L"0) Abort\n");
Print(L"1) One\n");
Print(L"2) Two\n");
Print(L"3) Three\n");
Print(L"4) Four\n");
Print(L"Enter Selection: ");
(*functions[Test])();
}
}
这是我尝试做的事情的要点。这是某种上下文的菜单系统(和takeInput(5),将暂停输入,停止循环,直到有人输入数字)。
问题是,以这种方式使用return显然是错误的。我认为看到(我认为)返回是一个函数,我无法理解为什么它不能被放入函数指针数组以便突破菜单。我想我可以创建一个虚函数,它在调用时基本上只返回true,并检查它(问题是所有其他函数都返回void)。即使这样有效,我宁愿有一个像上面的非工作示例一样自包含的解决方案。
有没有一种漂亮,干净,希望简短的做法,比我想到的更好?
答案 0 :(得分:3)
return
不是函数,它没有地址,因此你不能在指向函数的指针数组中使用它。
此外,Test
在前几次使用时似乎未初始化:
for (Test;
和
(*functions[Test])();
如果您想要突破for
循环,则必须使用break
或return
或for(;condition;)
中两个分号之间的适当条件。< / p>
函数调用不会破坏循环。除非,它是异乎寻常的,如abort()
,exit()
或longjmp()
。
答案 1 :(得分:1)
我用return
替换函数数组中的NULL
并在执行函数之前测试null,当函数指针为NULL
时返回。