我有几个功能。基本上是一个菜单,用户可以选择1-n个不同的选项,每个选项都有一个与之相关的功能。在这个例子中它被愚蠢了。
我想要确定的是提前退出函数的最佳方法。例如,当用户在菜单选项的功能中按Enter键时,我希望程序将它们发送回菜单而不在该功能中运行任何其他内容。
在下面的情况中,我只需致电showMenu()
并在其后面添加return
语句。唯一的问题是,如果用户退出多个函数,将会有一系列返回语句需要在最后解开。
有人可以告诉我是否有更有效的方法来实现这一点,或者我是否有钱。
void showMenu()
{
//Display menu
//Prompt user for menu option
//Run function of appropriate menu option
runSelectedFunction();
}
void runSelectedFunction()
{
//Get user input for the function and validate
//Check if the user input was only a '\n' if so show the menu and exit
showMenu();
return;
//Do the stuff that this function is meant to do.
}
答案 0 :(得分:4)
对我来说很好看。或者 - 因为有许多反对有多个退出点组成一个函数 - 你可以这样做:
void func()
{
//get input
if ( checkMenu() )
{
//do the stuff I am meant to do
}
else
{
showMenu();
}
}
因此您要避免在函数中添加第二个返回值。此外,根据您的需要,您可以始终在函数末尾进行showMenu()
调用
HTH
马里奥
答案 1 :(得分:0)
最好的方法?简而言之,不要。
为什么?
虽然它没有任何技术上的错误,并且你会发现所有,但在尝试追踪复杂代码中的错误或内存泄漏时,有时会导致令人头疼的问题。
仅在绝对必要时使用提前退货,然后首先尝试寻找备选方案:)
答案 2 :(得分:0)
另一种方法是使用以下模式来确保您的函数始终从一个地方返回,让您有机会始终释放资源(或报告错误等):
int func(void)
{
int ret = 0;
do
{
if (!allocate_resource())
{
ret = -1;
break;
}
if (!allocate_more_resources())
{
ret = -2;
break;
}
do_stuff();
}
while (0);
free_allocated_resources();
return (ret);
}