扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在 C 语言中实现子菜单向主菜单回退的常用方法是使用循环和条件语句控制程序流程。
成都创新互联公司是一家专业提供平凉企业网站建设,专注与成都网站建设、网站设计、H5高端网站建设、小程序制作等业务。10年已为平凉众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
具体实现步骤如下:
在主菜单中使用一个循环(如 while 循环),实现主菜单的重复显示和等待用户输入的功能。
当用户选择进入子菜单时,主菜单中的循环应该退出,进入子菜单的处理逻辑。
在子菜单中,当用户选择回到主菜单时,应该退出子菜单的处理逻辑,返回到主菜单中的循环中。
在主菜单中,当用户选择退出程序时,主菜单的循环应该退出,整个程序结束。
以下是一个简单的示例程序,实现了主菜单和一个子菜单的功能,并实现了子菜单向主菜单回退的功能:
#include stdio.h
int main() {
int choice = 0;
while (1) {
printf("主菜单:\n");
printf("1. 选项一\n");
printf("2. 选项二\n");
printf("3. 子菜单\n");
printf("4. 退出\n");
printf("请输入选项(1-4):");
scanf("%d", choice);
switch (choice) {
case 1:
printf("您选择了选项一。\n");
break;
case 2:
printf("您选择了选项二。\n");
break;
case 3:
printf("子菜单:\n");
printf("1. 子选项一\n");
printf("2. 子选项二\n");
printf("3. 返回主菜单\n");
printf("请输入选项(1-3):");
scanf("%d", choice);
switch (choice) {
case 1:
printf("您选择了子选项一。\n");
break;
case 2:
printf("您选择了子选项二。\n");
break;
case 3:
printf("返回主菜单。\n");
// 跳出子菜单的处理逻辑,返回到主菜单的循环中
break;
default:
printf("无效选项,请重新选择。\n");
break;
}
break;
case 4:
printf("退出程序。\n");
// 跳出主菜单的循环,结束程序
return 0;
default:
printf("无效选项,请重新选择。\n");
break;
}
}
return 0;
}
在这个示例程序中,主菜单使用了一个 while 循环,不断重复显示和等待用户输入。
当用户选择进入子菜单时,主菜单中的循环退出,进入子菜单的处理逻辑。子菜单也使用了一个 switch 语句,等待用户选择,并执行相应的处理逻辑。
当用户选择返回主菜单时,子菜单的处理逻辑退出
问题比较多,主要是两个:
输入的时候,用的格式和变量类型不匹配;
menu函数最后又调用menu,没必要。
改了一下,你看看。
#include stdio.h
#include stdlib.h
struct student
{
char name[30]; /*名字肯定是字符串型*/
int number[30];
char sex;
int age;
char addr[30];
struct student *next;
};
int a;
struct student *create()
{
struct student *phead=NULL;
struct student *pend,*pnew;
a=0;
pend=pnew=(struct student *)malloc(sizeof(struct student));
printf("\n请输入姓名\n");
scanf("%s",pnew-name); /*name已经是数组地址,不需要取地址*/
printf("\n请输入号码\n");
scanf("%s",pnew-number); /*number是字符串,要用%s*/
printf("\n请输入性别\n");
fflush(stdin); /*退不到菜单问题在这里,要清空缓存*/
scanf("%c",pnew-sex); /*char型要用%c*/
printf("\n请输入年龄\n");
scanf("%d",pnew-age);
printf("\n请输入地址\n");
scanf("%s",pnew-addr); /*addr已经是数组地址,不需要取地址*/
while(strcmp(pnew-number, "0") != 0) /*号码是字符串,字符串比较要用strcmp*/
{
a++;
if(a==1)
{
pnew-next=phead;
pend=pnew;
phead=pnew;
}
else
{
pnew-next=phead;
pend-next=pnew;
pend=pnew;
}
pnew=(struct student *)malloc(sizeof(struct student));
printf("\n请输入姓名\n");
scanf("%s",pnew-name);
printf("\n请输入号码\n");
scanf("%s",pnew-number);
printf("\n请输入性别\n");
fflush(stdin);
scanf("%c",pnew-sex);
printf("\n请输入年龄\n");
scanf("%d",pnew-age);
printf("\n请输入地址\n");
scanf("%s",pnew-addr);
}
free(pnew);
return phead;
}
void print(struct student *phead)
{
struct student *ptemp;
int iindex=1;
printf("共有%d位联系人\n",a);
ptemp=phead;
while(ptemp!=NULL)
{
printf("第%d位联系人是:\n",iindex);
printf("\n姓名%s",ptemp-name);
printf("\n号码%d",ptemp-number);
printf("\n性别%d",ptemp-sex);
printf("\n年龄%d",ptemp-age);
printf("\n地址%d",ptemp-addr);
ptemp=ptemp-next;
iindex++;
}
}
void menu()
{
struct student *phead;
int choice;
do
{
system("cls");
printf(" **************************************\n");
printf(" | 欢迎使用通讯录管理系统 |\n");
printf(" | 1--输入联系人的信息 |\n");
printf(" | 2--添加联系人信息 |\n");
printf(" | 3--删除联系人信息 |\n");
printf(" | 4--输出联系人信息 |\n");
printf(" | 5--退出系统 |\n");
printf(" **************************************\n");
printf(" 请选择项目1-5\n");
scanf("%d",choice);
switch(choice)
{
case 1:
phead=create();
break;
#if 0
case 2:
phead=insert(phead);
break;
case 3:
delete(phead,2);
break;
#endif
case 4:
print(phead);
break;
case 5:
exit(1);
case 0:
break;
}
}
while(choice!=0);
//menu(); /*这里注掉,不需要再调一次*/
}
实现功能的代码放在函数里面
这样功能实现完 函数返回,自然回到菜单.
一般这样
while(1)
{
print_menu();//打印菜单
scanf("%d",a);
switch(a)
{
case 1:
func1();
break;
....
default:
printf("input error\n");
break;
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流