轻描淡写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条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题