在 C 語言中實(shí)現(xiàn)子菜單向主菜單回退的常用方法是使用循環(huán)和條件語句控制程序流程。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供平?jīng)銎髽I(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為平?jīng)霰姸嗥髽I(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
具體實(shí)現(xiàn)步驟如下:
在主菜單中使用一個(gè)循環(huán)(如 while 循環(huán)),實(shí)現(xiàn)主菜單的重復(fù)顯示和等待用戶輸入的功能。
當(dāng)用戶選擇進(jìn)入子菜單時(shí),主菜單中的循環(huán)應(yīng)該退出,進(jìn)入子菜單的處理邏輯。
在子菜單中,當(dāng)用戶選擇回到主菜單時(shí),應(yīng)該退出子菜單的處理邏輯,返回到主菜單中的循環(huán)中。
在主菜單中,當(dāng)用戶選擇退出程序時(shí),主菜單的循環(huán)應(yīng)該退出,整個(gè)程序結(jié)束。
以下是一個(gè)簡單的示例程序,實(shí)現(xiàn)了主菜單和一個(gè)子菜單的功能,并實(shí)現(xiàn)了子菜單向主菜單回退的功能:
#include stdio.h
int main() {
int choice = 0;
while (1) {
printf("主菜單:\n");
printf("1. 選項(xiàng)一\n");
printf("2. 選項(xiàng)二\n");
printf("3. 子菜單\n");
printf("4. 退出\n");
printf("請(qǐng)輸入選項(xiàng)(1-4):");
scanf("%d", choice);
switch (choice) {
case 1:
printf("您選擇了選項(xiàng)一。\n");
break;
case 2:
printf("您選擇了選項(xiàng)二。\n");
break;
case 3:
printf("子菜單:\n");
printf("1. 子選項(xiàng)一\n");
printf("2. 子選項(xiàng)二\n");
printf("3. 返回主菜單\n");
printf("請(qǐng)輸入選項(xiàng)(1-3):");
scanf("%d", choice);
switch (choice) {
case 1:
printf("您選擇了子選項(xiàng)一。\n");
break;
case 2:
printf("您選擇了子選項(xiàng)二。\n");
break;
case 3:
printf("返回主菜單。\n");
// 跳出子菜單的處理邏輯,返回到主菜單的循環(huán)中
break;
default:
printf("無效選項(xiàng),請(qǐng)重新選擇。\n");
break;
}
break;
case 4:
printf("退出程序。\n");
// 跳出主菜單的循環(huán),結(jié)束程序
return 0;
default:
printf("無效選項(xiàng),請(qǐng)重新選擇。\n");
break;
}
}
return 0;
}
在這個(gè)示例程序中,主菜單使用了一個(gè) while 循環(huán),不斷重復(fù)顯示和等待用戶輸入。
當(dāng)用戶選擇進(jìn)入子菜單時(shí),主菜單中的循環(huán)退出,進(jìn)入子菜單的處理邏輯。子菜單也使用了一個(gè) switch 語句,等待用戶選擇,并執(zhí)行相應(yīng)的處理邏輯。
當(dāng)用戶選擇返回主菜單時(shí),子菜單的處理邏輯退出
問題比較多,主要是兩個(gè):
輸入的時(shí)候,用的格式和變量類型不匹配;
menu函數(shù)最后又調(diào)用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請(qǐng)輸入姓名\n");
scanf("%s",pnew-name);????/*name已經(jīng)是數(shù)組地址,不需要取地址*/
printf("\n請(qǐng)輸入號(hào)碼\n");
scanf("%s",pnew-number);????/*number是字符串,要用%s*/
printf("\n請(qǐng)輸入性別\n");
fflush(stdin);????/*退不到菜單問題在這里,要清空緩存*/
scanf("%c",pnew-sex);????/*char型要用%c*/
printf("\n請(qǐng)輸入年齡\n");
scanf("%d",pnew-age);
printf("\n請(qǐng)輸入地址\n");
scanf("%s",pnew-addr);????/*addr已經(jīng)是數(shù)組地址,不需要取地址*/
while(strcmp(pnew-number,?"0")?!=?0)????/*號(hào)碼是字符串,字符串比較要用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請(qǐng)輸入姓名\n");
scanf("%s",pnew-name);
printf("\n請(qǐng)輸入號(hào)碼\n");
scanf("%s",pnew-number);
printf("\n請(qǐng)輸入性別\n");
fflush(stdin);
scanf("%c",pnew-sex);
printf("\n請(qǐng)輸入年齡\n");
scanf("%d",pnew-age);
printf("\n請(qǐng)輸入地址\n");
scanf("%s",pnew-addr);
}
free(pnew);
return?phead;
}
void?print(struct?student?*phead)
{
struct?student?*ptemp;
int?iindex=1;
printf("共有%d位聯(lián)系人\n",a);
ptemp=phead;
while(ptemp!=NULL)
{
printf("第%d位聯(lián)系人是:\n",iindex);
printf("\n姓名%s",ptemp-name);
printf("\n號(hào)碼%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("????|???????歡迎使用通訊錄管理系統(tǒng)???????|\n");
printf("????|???????1--輸入聯(lián)系人的信息??????????|\n");
printf("????|???????2--添加聯(lián)系人信息????????????|\n");
printf("????|???????3--刪除聯(lián)系人信息????????????|\n");
printf("????|???????4--輸出聯(lián)系人信息????????????|\n");
printf("????|???????5--退出系統(tǒng)??????????????????|\n");
printf("????**************************************\n");
printf("????????????請(qǐng)選擇項(xiàng)目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();????/*這里注掉,不需要再調(diào)一次*/
}
實(shí)現(xiàn)功能的代碼放在函數(shù)里面
這樣功能實(shí)現(xiàn)完 函數(shù)返回,自然回到菜單.
一般這樣
while(1)
{
print_menu();//打印菜單
scanf("%d",a);
switch(a)
{
case?1:
func1();
break;
....
default:
printf("input?error\n");
break;
}
}