C语言二级菜单程序设计
下面是一个完整的C语言二级菜单程序示例,展示了如何实现一个具有两级菜单结构的控制台应用程序。

(图片来源网络,侵删)
程序代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数声明
void mainMenu();
void subMenu1();
void subMenu2();
void subMenu3();
void clearInputBuffer();
int main() {
mainMenu();
return 0;
}
// 主菜单
void mainMenu() {
int choice;
while (1) {
system("cls"); // 清屏 (Windows系统)
// system("clear"); // 清屏 (Linux/Unix系统)
printf("========== 主菜单 ==========\n");
printf("1. 功能一\n");
printf("2. 功能二\n");
printf("3. 功能三\n");
printf("0. 退出\n");
printf("============================\n");
printf("请选择: ");
if (scanf("%d", &choice) != 1) {
clearInputBuffer();
printf("输入无效,请重新输入!\n");
system("pause");
continue;
}
clearInputBuffer(); // 清除输入缓冲区中的剩余字符
switch (choice) {
case 1:
subMenu1();
break;
case 2:
subMenu2();
break;
case 3:
subMenu3();
break;
case 0:
printf("感谢使用,再见!\n");
exit(0);
default:
printf("无效的选择,请重新输入!\n");
system("pause");
}
}
}
// 子菜单1
void subMenu1() {
int choice;
while (1) {
system("cls");
printf("========== 功能一子菜单 ==========\n");
printf("1. 子功能1.1\n");
printf("2. 子功能1.2\n");
printf("3. 子功能1.3\n");
printf("0. 返回主菜单\n");
printf("=================================\n");
printf("请选择: ");
if (scanf("%d", &choice) != 1) {
clearInputBuffer();
printf("输入无效,请重新输入!\n");
system("pause");
continue;
}
clearInputBuffer();
switch (choice) {
case 1:
printf("执行子功能1.1\n");
system("pause");
break;
case 2:
printf("执行子功能1.2\n");
system("pause");
break;
case 3:
printf("执行子功能1.3\n");
system("pause");
break;
case 0:
return; // 返回主菜单
default:
printf("无效的选择,请重新输入!\n");
system("pause");
}
}
}
// 子菜单2
void subMenu2() {
int choice;
while (1) {
system("cls");
printf("========== 功能二子菜单 ==========\n");
printf("1. 子功能2.1\n");
printf("2. 子功能2.2\n");
printf("0. 返回主菜单\n");
printf("=================================\n");
printf("请选择: ");
if (scanf("%d", &choice) != 1) {
clearInputBuffer();
printf("输入无效,请重新输入!\n");
system("pause");
continue;
}
clearInputBuffer();
switch (choice) {
case 1:
printf("执行子功能2.1\n");
system("pause");
break;
case 2:
printf("执行子功能2.2\n");
system("pause");
break;
case 0:
return;
default:
printf("无效的选择,请重新输入!\n");
system("pause");
}
}
}
// 子菜单3
void subMenu3() {
int choice;
while (1) {
system("cls");
printf("========== 功能三子菜单 ==========\n");
printf("1. 子功能3.1\n");
printf("0. 返回主菜单\n");
printf("=================================\n");
printf("请选择: ");
if (scanf("%d", &choice) != 1) {
clearInputBuffer();
printf("输入无效,请重新输入!\n");
system("pause");
continue;
}
clearInputBuffer();
switch (choice) {
case 1:
printf("执行子功能3.1\n");
system("pause");
break;
case 0:
return;
default:
printf("无效的选择,请重新输入!\n");
system("pause");
}
}
}
// 清除输入缓冲区
void clearInputBuffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF);
}
程序说明
-
程序结构:
- 主菜单(mainMenu):显示一级菜单选项
- 三个子菜单(subMenu1, subMenu2, subMenu3):分别对应主菜单的三个选项
- 每个菜单都是一个循环结构,直到用户选择返回或退出
-
关键功能:
- 使用
system("cls")或system("clear")清屏(根据操作系统选择) - 输入验证:检查用户输入是否为有效数字
- 输入缓冲区清理:防止非法输入导致的问题
- 菜单导航:通过switch-case结构实现菜单选择
- 使用
-
扩展建议:
- 可以添加更多子菜单和功能
- 可以使用函数指针数组来简化菜单结构
- 可以添加文件操作、数据结构等更复杂的功能
- 可以改进用户界面,添加颜色等视觉效果
编译和运行
- 将代码保存为
menu.c - 使用C编译器编译:
- Windows:
gcc menu.c -o menu - Linux/Unix:
gcc menu.c -o menu
- Windows:
- 运行程序:
- Windows:
menu.exe - Linux/Unix:
./menu
- Windows:
这个程序提供了一个清晰的二级菜单结构,可以根据需要进一步扩展功能。

(图片来源网络,侵删)

(图片来源网络,侵删)
