我在大学的第一学期学习C编程。我们已经对代码模块化进行了介绍,而我的问题的基本要点是我创建了一个函数,该函数提示用户继续或退出程序。显然,在此之前我还有其他一些功能,我在main()中调用了这些功能。请记住,函数位于单独的C文件中。如果用户输入“ Y”(即从头开始启动程序),我希望返回到main(),但是鉴于我的初学者知识,我很难弄清楚该怎么做。任何帮助/指导将不胜感激!
int continueOrExit() {
char response;
char upperResponse;
printf("Do you wish to continue the program? Y/N");
scanf("%c", &response);
upperResponse = toupper(response);
while(upperResponse == 'Y')
main(); // this is the bit which I struggle with
.....
}
您不应该在已经从main()
调用的函数中再次run您的main()
。好吧,您可以进行递归调用,但是在这种情况下,您绝对不希望这样做。
您想要做的是,当用户选择婴儿床时,将continueOrExit()
设为返回 true,然后将整个main()
主体放入do { /* your code here */ } while (continueOrExit());
。
直接从一个功能转到另一个功能违反了structured programming的规则。它可能用于处理错误(longjmp
),但应谨慎使用这种机制-仅当您确实有无法以任何其他方式处理的错误时才使用。
要实现“重新开始”功能,必须牢记这一点来构造代码。例如:
longjmp
在这里,int exitByUserRequest()
{
char upperResponse;
...
return (upperResponse != 'Y');
}
int main()
{
do
{
...
} while (!exitByUserRequest());
}
函数调用main
并解释其退出代码。
如果在exitByUserRequest
和“询问用户是否继续”之间有多层功能,则所有这些功能都应使用返回码将信息“退出或继续”传递给调用方。因此,您应该避免这种情况-应该直接从main
调用“退出或继续”。