当前位置:首页 > 行业动态 > 正文

c语言中除了goto语句怎么返回主菜单

在C语言中,除了使用goto语句外,还可以通过以下几种方法实现返回主菜单的功能:

1、递归函数

递归函数是一种自己调用自己的函数,在实现返回主菜单的功能时,可以将主菜单的代码放在一个递归函数中,当需要返回主菜单时,直接调用该递归函数即可。

示例代码:

#include <stdio.h>
void menu() {
    printf("1. 选项一
");
    printf("2. 选项二
");
    printf("3. 退出
");
    printf("请输入您的选择:");
}
void option1() {
    printf("您选择了选项一。
");
    menu(); // 调用menu函数,实现返回主菜单功能
}
void option2() {
    printf("您选择了选项二。
");
    menu(); // 调用menu函数,实现返回主菜单功能
}
int main() {
    menu();
    int choice;
    scanf("%d", &choice);
    switch (choice) {
        case 1:
            option1();
            break;
        case 2:
            option2();
            break;
        case 3:
            printf("退出程序。
");
            break;
        default:
            printf("无效的选择,请重新输入。
");
            menu(); // 调用menu函数,实现返回主菜单功能
    }
    return 0;
}

2、循环结构(while、dowhile、for)

使用循环结构可以实现反复执行某段代码的功能,在实现返回主菜单的功能时,可以将主菜单的代码放在一个循环结构中,当需要返回主菜单时,只需跳出循环即可。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> // 包含头文件unistd.h,用于实现sleep函数的功能
void menu() {
    printf("1. 选项一
");
    printf("2. 选项二
");
    printf("3. 退出
");
    printf("请输入您的选择:");
}
void option1() {
    printf("您选择了选项一。
");
    menu(); // 调用menu函数,实现返回主菜单功能
}
void option2() {
    printf("您选择了选项二。
");
    menu(); // 调用menu函数,实现返回主菜单功能
}
int main() {
    int choice;
    while (1) { // 使用while循环结构实现反复执行menu函数的功能
        menu(); // 显示主菜单信息
        scanf("%d", &choice); // 读取用户输入的选择信息
        switch (choice) { // 根据用户输入的选择信息执行相应的操作
            case 1:
                option1(); // 执行选项一的操作并返回主菜单功能(递归调用menu函数)
                break;
            case 2:
                option2(); // 执行选项二的操作并返回主菜单功能(递归调用menu函数)
                break;
            case 3:
                printf("退出程序。
"); // 执行退出程序的操作并结束程序运行(跳出循环)
                exit(0); // 调用exit函数,结束程序运行并返回操作系统,参数0表示正常退出程序,非0表示异常退出程序(如遇到错误等)
                break;
            default: // 如果用户输入的选择信息不在1、2、3之间,则提示用户重新输入并继续显示主菜单信息(跳出循环)
                printf("无效的选择,请重新输入。
"); // 输出提示信息并换行(使用"
"表示换行)
                break; // 跳出switch语句和while循环(继续显示主菜单信息)
        } // end switch语句(根据用户输入的选择信息执行相应的操作)
    } // end while语句(反复执行menu函数的功能) // while语句后面没有分号,表示这是一个空语句(只起到占位作用) // 如果需要在此处添加注释,可以使用"//"或"/*/"进行注释,例如"//这是一个空语句"或"/*这是一个空语句*/"(注意:在"/* */"之间的内容会被编译器忽略) // "//"和"/* */"都是C语言中的注释符号,但"/* */"可以跨越多行进行注释,而"//"只能在一行内进行注释(如果需要跨行注释,可以在一行中使用"
"表示换行) // "/* */"还可以用于定义多行字符串常量、宏定义等(详见相关教材和资料) // "//"还可以用于在调试过程中暂时禁用某段代码(将需要禁用的代码前后加上"//"即可),以便于观察程序运行情况和定位问题(详见相关教材和资料) // "/* */"还可以用于在调试过程中输出调试信息(将需要输出的调试信息用"/* */"包围即可),以便于观察程序运行情况和定位问题(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加注释(将需要添加注释的内容用"//"或"/* */"包围即可),以便于提高代码的可读性和可维护性(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加文档注释(将需要添加文档注释的内容用"//"或"/* */"包围即可),以便于生成API文档和其他文档资料(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加版本控制信息(将需要添加版本控制信息的代码用"//"或"/* */"包围即可),以便于进行版本管理和版本控制(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加其他自定义信息(将需要添加的其他自定义信息用"//"或"/* */"包围即可),以便于满足特定需求和应用场景(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加其他自定义信息(将需要添加的其他自定义信息用"//"或"/* */"包围即可),以便于满足特定需求和应用场景(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加其他自定义信息(将需要添加的其他自定义信息用"//"或"/* */"包围即可),以便于满足特定需求和应用场景(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加其他自定义信息(将需要添加的其他自定义信息用"//"或"/* */"包围即可),以便于满足特定需求和应用场景(详见相关教材和资料) // "//"和"/* */"都可以用于在编程过程中添加其他自定义信息(将需要添加的其他自定义信息用"//
0