c语言如何返回菜单?

大神麻烦给看一下为什么我这个返回不了菜单?自己打的通讯录。谢谢。#include<stdio.h>#include<stdlib.h>structstudent{char... 大神麻烦给看一下为什么我这个返回不了菜单?自己打的通讯录。谢谢。

#include <stdio.h>
#include <stdlib.h>
struct student
{
char name;
char 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);
printf("\n请输入号码\n");
scanf("%d",&pnew->number);
printf("\n请输入性别\n");
scanf("%d",&pnew->sex);
printf("\n请输入年龄\n");
scanf("%d",&pnew->age);
printf("\n请输入地址\n");
scanf("%d",&pnew->addr);
while(pnew->number!=0)
{
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));
scanf("%s",&pnew->name);
scanf("%d",&pnew->number);
scanf("%d",&pnew->sex);
scanf("%d",&pnew->age);
scanf("%d",&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;
case 2:
phead=insert(phead);break;
case 3:
delete(phead,2);break;
case 4:
print(phead);break;
case 5:
exit(1);
case 0:
break;
}
}
while(choice!=0);
menu();
}
展开
 我来答
百度网友83cdc1c
2015-06-30 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:852万
展开全部

问题比较多,主要是两个:

  1. 输入的时候,用的格式和变量类型不匹配;

  2. 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();    /*这里注掉,不需要再调一次*/
}
tattackor
推荐于2017-10-07 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:891万
展开全部

1、如果只是想返回已经写好的主菜单页面的话  可以直接在当前函数中结束位置调用主菜单所在的函数,如果想输入某值返回的话  就加个输入提示 比如 在其他函数页面加上“输入0返回主菜单”就可以在任意时候  输入0来返回  当然实现的时候也是输入语句加判断语句 加调用主菜单所在函数,调用前先调用清屏函数。

2、例程:

#include<stdio.h>
int menu()
{ int rt;
  char str[256];
  printf("1 ****\n");
  printf("2 ****\n");
  printf("3 ****\n");
  printf("4 ****\n");
  printf("5 退出程序\n");
  printf("请选择,输入选项前面的数字后回车: "); scanf("%s",str);
  if ( str[0]>='1' && str[0]<='5' ) rt=str[0]-'0'; else rt=0;
  return rt;
}
void f1() {}
void f2() {}
void f3() {}
void f4() {}
void main()
{ int s,loop=1;
  while ( loop )
  { s=menu();
    switch ( s )
    { case 1: f1(); break;
      case 2: f2(); break;
      case 3: f3(); break;
      case 4: f4(); break;
      case 5: loop=0; break;
      default: break;
    }
  }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丹问玉sp
2015-06-30 · 超过14用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:25.5万
展开全部
while(choice!=0);
menu();

去掉menu();

这个函数是用循环来控制,不需要进行递归。

当choice不等于0的时候,做完选择的事会自动返回菜单
追问
还是不行啊大神,我这个输入完了结果一直无限输入。。不顶用啊。。。
追答
menu()函数是没问题的,就是其他的函数,可能出现了进入循环后出不去的情况,你可以检查一下其他函数的循环体,看是不是无限循环

while(pnew->number!=0)

{

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));

scanf("%s",&pnew->name);

scanf("%d",&pnew->number);

scanf("%d",&pnew->sex);

scanf("%d",&pnew->age);

scanf("%d",&pnew->addr);

}

这个循环有问题,可能是在这里没出去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式