看看我的查找的那个函数,输入超过十九个字符就提示内存冲突
#include"fenlei.h"#include<stdio.h>
#include<string.h>
#include<stdlib.h>
// 高手帮帮忙能不能让我的输入字符串的地方更优化些....
void zhuce(struct Dangan* &_head,struct Dangan* &_p1,struct Dangan* &_p2) //注册
{
int i,m;
_p1 = (struct Dangan*)malloc(sizeof(struct Dangan));
if(_head == NULL)
{
_head = _p1;
_head->next = NULL;
_p2 = _p1;
}
else
{
_p2->next = _p1;
_p2 = _p1;
_p2->next = NULL;
}
printf("输入学生姓名:"); //学生姓名输入
fgets(_p1->name,19,stdin);
i = 1;
while(_p1->name[i-1] != '\0')
{
if(_p1->name[i] == '\n')
_p1->name[i] = '\0';
i++;
}
printf("输入学生性别(男或女):"); //学生性别输入
scanf("%s",_p1->xingbie);
while(getchar()!='\n');
while(strcmp(_p1->xingbie,"男")!=0 && strcmp(_p1->xingbie,"女")!=0)
{
printf("输入学生性别(男或女):");
scanf("%s",_p1->xingbie);
while(getchar()!='\n');
}
printf("%s在几年级:",_p1->name); //学生上几年级
scanf("%c",&_p1->ji);
while(getchar()!='\n');
printf("%s在%c年级几班:",_p1->name,_p1->ji); //学生在几班
scanf("%c",&_p1->ban);
while(getchar()!='\n');
printf("%s在%c年级%c班.\n",_p1->name,_p1->ji,_p1->ban);
printf("输入%s同学的语文成绩:",_p1->name); //语文 数学 英语 三门课程
while((m = scanf("%d",&_p1->chengji[0])) != 1 && _p1->chengji[0] < 0 || _p1->chengji[0] > 100)
{
if(m != 1)
scanf("%*s");
printf("请输入0-100之间的整形类型的数字:");
}
printf("输入%s同学的数学成绩:",_p1->name);
while((m = scanf("%d",&_p1->chengji[1])) != 1 && _p1->chengji[1] < 0 || _p1->chengji[1] > 100)
{
if(m != 1)
scanf("%*s");
printf("请输入0-100之间的整形类型的数字:");
}
printf("输入%s同学的英语成绩:",_p1->name);
while((m = scanf("%d",&_p1->chengji[2])) != 1 && _p1->chengji[2] < 0 || _p1->chengji[2] > 100)
{
if(m != 1)
scanf("%*s");
printf("请输入0-100之间的整形类型的数字:");
}
while(getchar()!='\n');
_p1->zongfen = _p1->chengji[0] + _p1->chengji[1] + _p1->chengji[2]; //学生总分
_p1->pingjun = (double)_p1->zongfen / 3.0; //学生平均分数
printf("*****************************\n");
printf("姓名: %s\n",_p1->name);
printf("性别: %s\n",_p1->xingbie);
printf("班级: %c年级%c班",_p1->ji,_p1->ban);
printf("语文成绩:%d\n数学成绩:%d\n英语成绩:%d\n",_p1->chengji[0],_p1->chengji[1],_p1->chengji[2]);
printf("总分数:%d\n平均分:%.lf\n",_p1->zongfen,_p1->pingjun);
printf(" 注册成功\n*****************************\n");
}
void Display(struct Dangan *_p1) //显示档案所有内容
{
struct Dangan *p;
p = _p1;
if(p == NULL)
{
printf("没有注册会员\n");
}
else
{
while(p->next != NULL)
{
printf("%s是%s同学,在%c年级%c班,\n语文成绩是%d,数学成绩是%d,英语成绩是%d,总分是%d,平均分数是%.2lf.\n",
_p1->name,_p1->xingbie,_p1->ji,_p1->ban,_p1->chengji[0],_p1->chengji[1],_p1->chengji[2],_p1->zongfen,_p1->pingjun);
p = _p1;
_p1 = _p1->next;
}
}
}
void Display1(struct Dangan *p) //显示每个struct单元的首地址
{
struct Dangan *_p;
_p = p;
if(p == NULL)
{
printf("没有注册会员\n");
}
else
{
while(_p->next != NULL)
{
printf("%p\n",p);
_p = p;
p = p->next;
}
}
}
char caidan(void) //菜单选项输入
{
char ch;
printf("1)注册 2)查找 3)删除 4)显示所有会员 5)退出\n");
printf("请输入你的选项(1-5):");
ch = getchar();
while(getchar()!='\n');
while(ch<'1' || ch>'5')
{
printf("请认真的再次输入(1-5):");
ch = getchar();
while(getchar()!='\n');
}
return ch;
}
void chazhao(struct Dangan *p) //查找
{
char name[20];
int i;
struct Dangan *_p;
_p = p;
printf("输入要查找的姓名");
for(i = 0; name[i-1] != '\n';i++)
{
name[i] = getchar();
}
if(name[i-1] == '\n')
name[i-1] = '\0';
if(p == NULL)
{
printf("没有注册会员\n");
}
else
{
while(_p->next != NULL)
{
if(strncmp(name,p->name,19)==0)
{
printf("*****************************\n");
printf("姓名: %s\n",p->name);
printf("性别: %s\n",p->xingbie);
printf("班级: %c年级%c班",p->ji,p->ban);
printf("语文成绩:%d\n数学成绩:%d\n英语成绩:%d\n",p->chengji[0],p->chengji[1],p->chengji[2]);
printf("总分数:%d\n平均分:%.lf\n",p->zongfen,p->pingjun);
printf(" 学员属性\n*****************************\n");
break;
}
_p = p;
p = p->next;
}
}
}
void shanchu(struct Dangan * &p)
{
}