轻描淡写0-0 2016-03-02 08:25 采纳率: 100%
浏览 1750
已采纳

子函数结束后没有返回主函数就崩溃了怎么回事

#include
#include
#include
typedef struct reader{
char name[10];
char key[6];
int kind;//普通读者
struct reader *next;
}reader;
typedef struct bookers{
char name[10];
char key;
int kind;//图书管理员
struct bookers *next;
}bookers;
typedef struct allers{
char name[10];
char key;
int kind;//系统管理员
struct allers *next;
}allers;
typedef struct allbooks{
int read;//记录号
int num;//书号
char name[50];//书名
char write[10];//作者
char pub[30];//出版社
int have;//藏书量
int take;//借出数
struct allbooks *next;
}allbooks;
void start(reader *head,bookers *_head,allers *head_);
void readerstart(reader *head);
void online(reader *head,bookers *_head,allers *head_)
{
gome: printf("\t\t请输入用户名\n");
char name[10];int choice=3;
fflush(stdin);
scanf("%s",name);////判断普通用户!!!!
while(head->next!=NULL)//确认字符串比较返回值
{
int a=strcmp(name,head->name);
if(a==0)
{

while(choice>=0)
{
if(choice==0)
{
printf("\t\t请重新登录!!\n");
goto gome;
}

            printf("\t\t请输入密码\n");
            char key[6];
            scanf("%s",key);
            if(strcmp(key,head->key)==0)
            {goto in;}//用户管理系统
            else
            {
                choice--;
                printf("密码输入错误,您还有%d次机会",choice);
            }
        }
    }
    else
    head=head->next;
}

in: readerstart(head);
}
void readerstart(reader head)
{
printf("
***************************************************\n");
printf("\t欢迎进入图书管理系统,您可以进行以下功能:\n");
printf("\t\t\t 1. 用户信息输入\n");
printf("\t\t\t 2. 用户信息修改\n");
printf("\t\t\t 3. 用户信息删除\n");
printf("\t\t\t 4. 用户信息显示\n");
printf("\t\t\t 5. 用户密码修改\n");
printf("\t\t\t 6. 返回主菜单\n");
int choice;
printf("请输入您想使用的功能:");
scanf("%d,&choice");
switch(choice)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
}
}

void start(reader head,bookers *_head,allers *head_)
{
char a='n';
/
while(a!='y'||a!='Y')
{*/
printf("\t\t 欢迎进入图书管理系统\n");
printf(" *********************************************\t\n ");
printf("\t\t\t用户登录");
getchar();
online(head,_head,head_);
/* printf("\t\t是否退出?");
printf("Y N");
fflush(stdin);
scanf("%c",&a);
}*/
}
void main()

{
reader *head;bookers *_head;allers *head_;
head=(reader *)malloc(sizeof(reader));
strcpy(head->name,"123");
strcpy(head->key,"789");
start(head,_head,head_);
printf("欢迎下次使用!");
}
选择6之后并不能退出程序,调试发现start函数中内容运行完了,但是没回到主函数就会崩溃。
图片说明

  • 写回答

3条回答

  • oyljerry 2016-03-02 09:45
    关注

    栈溢出等,子函数中堆栈被破坏了。多检查你的子函数代码

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

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功