C的指针真的是号难用啊.老是出错.
//总是提示断点 内存冲突#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Dangan
{
char name[20];
char xingbie[4];
char ban;
char ji;
unsigned int chengji[3];
unsigned int zongfen;
double pingjun;
unsigned int mingci;
struct Dangan *next;
};
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之间的整形类型的数字:");
}
_p1->zongfen = _p1->chengji[0] + _p1->chengji[1] + _p1->chengji[2]; //学生总分
_p1->pingjun = (double)_p1->zongfen / 3.0; //学生平均分数
printf("%s是%s同学,在%c年级%c班,语文成绩是%d,\n数学成绩是%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);
}
void Display(struct Dangan *_p1) //显示档案所有内容
{
while(_p1->next != NULL)
{
printf("%s是%s同学,在%c年级%c班,语文成绩是%d,\n数学成绩是%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);
_p1 = _p1->next;
}
}
void Display1(struct Dangan *p)
{
while(p->next != NULL)
{
printf("%p\n",p);
p = p->next;
}
}
int main()
{
struct Dangan *head,*p1,*p2;
zhuce(head,p1,p2);
Display(head);
system("pause");
return 0;
}