2 qq 33582651 qq_33582651 于 2016.03.02 16:25 提问

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

#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函数中内容运行完了,但是没回到主函数就会崩溃。
图片说明

2个回答

oyljerry
oyljerry   Ds   Rxr 2016.03.02 17:45
已采纳

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

devmiao
devmiao   Ds   Rxr 2016.03.02 19:36
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!