duanyuxuanP 2015-03-21 02:33 采纳率: 100%
浏览 14846
已采纳

C语言怎样编写程序运行完后,不自动结束,而是返回程序的开始的主菜单?

我的程序运行完一个功能后按任意键就退出了,而不是返回主菜单
代码如下,应该怎么改?(具体一点,菜鸟一个)多谢!

#include
#include
#include
#include
#include

#define LENTEL sizeof(tel)
#define ID struct tel
struct tel
{
char name[15];
char tele[11];
char style[15];
char mail[20];
ID * next;
};

ID *id = NULL;

/*读取telephone.txt文件中的内容创建学生链表*/
ID* create()
{
ID head;
ID *p1,*p2;
p2 = (ID
)malloc(LENTEL);
head = p2;

FILE *fp;
if((fp = fopen("telephone.txt","r")) == NULL)
{
       printf("联系人文件打开错误,请将telephone.txt放置与程序同一目录下!\n");
       exit(0);
}


while(!feof(fp))
{
    p1 = (ID*)malloc(LENTEL);
    fscanf(fp,"%s%s%s%s",p1->name,p1->tele,p1->style,p1->mail);
    p1->next = NULL;
    p2->next = p1;
    p2 = p1;
}

fclose(fp);
return head;

}

ID* findbyname(char name[])
{
ID* p = id;
ID* temp = NULL;
while (p!=NULL)
{
if(strcmp(name,p->name) == 0)
{
temp = p;
break;
}
else
{
p = p->next;
}
}
return temp;
}

ID* findbytele(char tele[])
{
ID* p = id;
ID* temp = NULL;
while (p!=NULL)
{
if(strcmp(tele,p->tele) == 0)
{
temp = p;
break;
}
else
{
p = p->next;
}
}
return temp;
}

/*判断这个联系人是否存在*/
bool Istel(char name[])
{
ID *p = id->next;
bool flag = false;
while (p != NULL)
{
if(strcmp(p->name,name) == 0)
{
flag = true;
}
p=p->next;
}
return flag;
}

int add()
{
menu();
ID *newtel = NULL;
ID *p = id;
char tel_name[15];
char tel_tele[11];
char tel_style[15];
char tel_mail[20];

printf("\n------- 请输入学生基本信息 --------\n");
printf("姓名      电话       类别       邮箱\n");
printf("--------------------------------------\n");
scanf("%s%s%s%s",tel_name,tel_tele,tel_style,tel_mail);

if(!Istel(tel_name))

{
    newtel = (ID*)malloc(LENTEL);
    strcpy(newtel->name,tel_name);
    strcpy(newtel->tele,tel_tele);
    strcpy(newtel->style,tel_style);
    strcpy(newtel->mail,tel_mail);
    newtel->next = NULL;
    for(p=p->next; p->next!=NULL; p=p->next);
    p->next = newtel;

    printf("\n联系人已添加成功!\n");
}
else
{
    printf("\n该联系人姓名已存在!\n");
}
getch();

return 0;

}

void Print_Inquire_All()
{
void menu_print_out();
ID *p1 = id->next;
menu_print_out();
while (p1!=NULL)
{
printf("%s\t%s\t%s\t%s\n",p1->name,p1->tele,p1->style,p1->mail);
p1 = p1->next;
}

system("pause");            

}

void menu_print_out()
{
printf("\n---------------------------------\n");
printf("\n---------------------------------\n");
}

/*主菜单*/
void menu(void)
{
void ReadBack();

printf(" ╭════════╮ \n");

printf("╭══════╣通讯管理系统V1.0╠══════╮\n");

printf("║ ╰════════╯ ║\n");

printf("║ 【1】添加数据 【3】退出系统 ║\n");

printf("║ ║\n");

printf("║ 【2】查询数据 ************* ║\n");

printf("║ ║\n");

printf("╰══════════════════════╯\n");

printf("◎请输入功能前的序号进入相应的工具:【 】\b\b");

int a = 0;
a = getchar();

while(a!='1'&&a!='2'&&a!='3') 
{  
    printf("error! please input the right number!\n");  
    putchar('\a');  
    getchar();  
    printf("◎请重新输入功能前的序号进入相应的工具:【   】\b\b");  
    a = getchar();  
}  
switch(a) 
{  
case '1': 
     add();  
    break;  
    case '2': 
     Print_Inquire_All();  
    case '3': 
    ReadBack();
    exit(0);  
    break;  
}  
getchar();  

}

/*退出程序时将数据写回telephone.txt进行更新*/
void ReadBack()
{
FILE *TEL = fopen("telephone.txt","w");
ID *te = id->next;

while (te != NULL)
     {
      fwrite((char*)&id,sizeof(ID),1,TEL);
      te = te->next;
     }

fclose(TEL);

}

void Lunch()
{

id = create();
menu();

}

void main()
{
SetConsoleTitle("C语言通讯录管理系统");

Lunch();
}

  • 写回答

3条回答 默认 最新

  • qq_15269917 2015-03-21 03:22
    关注

    用一个while循环 把主菜单放到循环中 并进行字符判断例如 回车继续循环主菜单 输入exit则退出 最好加一个清屏函数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?