动态链表输入学生数据运行发生错误
#include<iostream.h>
#include<malloc.h>
#include <string.h>
int length=0;//动态链表的长度
typedef struct student//定义结构体变量
{
int num;//学号
int grade[3];//三门课的成绩
char name[10];//姓名
struct student *next;
}Node;
Node *creat()//头插法建立动态链表
{
Node *head,*p1;
int flag=1,k;
char name1[10];
int grade1[3];
head=(Node *)malloc(sizeof(Node));head->next=NULL;// 开辟头结点
while(flag)
{
cout<<"请输入学号";
cin>>k;//输入学号
cout<<"请输入姓名";
cin>>name1;//输入姓名
cout<<"请输入三门课的成绩";
for(int i=0;i<3;i++)
cin>>grade1[i];//输入三门课的成绩
if(k!=0)
{
p1=(Node *)malloc(sizeof(Node));
p1->num=k;
strcpy(p1->name,name1);
for(int i=0;i<3;i++)
p1->grade[i]=grade1[i];
p1->next=head->next;
head->next=p1;
length++;
}
else flag=0;
}
return head;//返回头结点的地址
}
void print(Node *p2)//输出链表
{
p2=p2->next;
while(p2)
{
cout<<p2->num<<
cout<<p2->name;
for(int i;i<3;i++)
cout<<p2->grade[i];
p2=p2->next;
}
cout<<'\n';
}
main()
{
Node *pt;
cout<<"请输入您的数据:";
pt=creat();
print(pt);
}
[解决办法]
你的代码格式看着有些累啊。头结点是一个链表的指针,你为什么要给他分配空间呢?
在这里发帖,用格式栏里面的代码,然后在代码元素里面输入代码,这样好看些,代码注意缩进。
我还有课,剩下的晚上9点之后才有时间帮你细看。
[解决办法]
头结点不是一个指针,头结点和普通的数据节点的类型是一样的。只不过头结点的数据域不存放数据。
引入头结点后,对链表的操作,如插入、删除将变得更方便。
你的代码其他地方没问题,只是输出函数出了问题。这是修改后的代码:
void print(Node *p2)//输出链表
{
p2=p2->next;
while(p2)
{
cout<<p2->num<<" "<<p2->name<<endl; //注意这里。
//for(int i;i<3;i++)//这里出错实在不应该
for(int i=0;i<3;i++)
cout<<p2->grade[i]<<" ";
p2=p2->next;
}
cout<<'\n';
}