当模块化C代码时,在一个函数中可以循环到另一个函数(即到我的main()c文件)?

问题描述 投票:0回答:2

我在大学的第一学期学习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

    .....
    }
c modularity
2个回答
1
投票

您不应该在已经从main()调用的函数中再次run您的main()。好吧,您可以进行递归调用,但是在这种情况下,您绝对不希望这样做。

您想要做的是,当用户选择婴儿床时,将continueOrExit()设为返回 true,然后将整个main()主体放入do { /* your code here */ } while (continueOrExit());


0
投票

直接从一个功能转到另一个功能违反了structured programming的规则。它可能用于处理错误(longjmp),但应谨慎使用这种机制-仅当您确实有无法以任何其他方式处理的错误时才使用。

要实现“重新开始”功能,必须牢记这一点来构造代码。例如:

longjmp

在这里,int exitByUserRequest() { char upperResponse; ... return (upperResponse != 'Y'); } int main() { do { ... } while (!exitByUserRequest()); } 函数调用main并解释其退出代码。

如果在exitByUserRequest和“询问用户是否继续”之间有多层功能,则所有这些功能都应使用返回码将信息“退出或继续”传递给调用方。因此,您应该避免这种情况-应该直接从main调用“退出或继续”。

© www.soinside.com 2019 - 2024. All rights reserved.