c++链表一个基础程序的问题

#include <iostream>
#include <cstring>
using namespace std;
typedef struct Student{
int no;
char name[20];
double score;
struct Student *next;
}Student;
typedef Student *StudentList;

void InitStudent(StudentList&);
void CreateStudent(StudentList&);
//void AddStudent(StudentList&,Student s);
void DeleteStudent(StudentList&,int );
void DisplayStudent(StudentList);
int NoOfStudent(StudentList);

int main()
{
StudentList L;
InitStudent(L); CreateStudent(L); DisplayStudent(L);
cout<<"The number of the students:"<<NoOfStudent(L)<<"\n";
//cout<<"The number of the students:"<<NoOfStudent(L)<<"\n";
cout<<"Delete No."<<2<<"\n"; DeleteStudent(L,2); DisplayStudent(L);
return 0;
}
void InitStudent(StudentList& L)
{
cin>>L->no;
if(L->no!=-1)
{
cin>>L->name;
cin>>L->score;
}
}
void CreateStudent(StudentList& L)
{
StudentList p;
p=L;
while(p->no!=-1)
{
p=(Student *)malloc(sizeof(Student));
void InitStudent(StudentList& p);
p->next=L;
L=p;
}
}
void DisplayStudent(StudentList L)
{
cout<<"Student List:"<<endl;
L=L->next;
while(L!=NULL)
{
cout<<"number:"<<L->no<<",name:"<<L->name<<",score:"<<L->score<<endl;
L=L->next;
}
}
int NoOfStudent(StudentList L)
{
int a=0;
L=L->next;
while(L!=NULL)
{
a++;
L=L->next;
}
return a;
}
void DeleteStudent(StudentList& L,int a)
{
L=L->next;
while(L!=NULL)
{
if(L->no==a)
{
StudentList p;
p=L->next;
L->next=p->next;
}
L=L->next;
}
}
这个程序是统计学生的学号姓名和成绩的链表结构
但是我在第一个cin进行输入的时候就报错输入不下去
想问问这是什么原因 求解。

void InitStudent(StudentList& L)
{
cin>>L->no;
if(L->no!=-1)
{
cin>>L->name;
cin>>L->score;
}
}
这个出错了,L是一个引用啊,不是指针,L后面应该接".",例如:cin>>L.no;
希望能够帮到你。追问

我也试过这么改
但是这样编译都会出现问题
error C2228: left of '.name' must have class/struct/union type
我也不知道怎么办才好。。。。求救。。。

追答

不好意思,我没看清除题目:typedef Student *StudentList;

应该是你原来的写法,我上机运行下再告诉你。
发现了你的问题,也是初学者最容易犯的问题。
StudentList L;这个代码,你直接定义了一个指针类型,但是没有分配内存,导致这个指针是一个野指针(没有初始化指向的指针),所以系统会报错。

第二点是:
void CreateStudent(StudentList& L)
{
StudentList p;
p=L;
while(p->no!=-1)
{
//p=(Student *)malloc(sizeof(Student));
p = new Student; //学了c++尽量用c++的东西,好用
void InitStudent(StudentList& p); //这个地方你只是声明了,把void去掉,
// 形参的StudentList&也去掉
p->next=L;
L=p;
}
}
我注释的地方标示了,你这个地方多了个void所以函数压根没执行
后面好像还有点问题,时间关系我就不继续查了。。。

温馨提示:内容为网友见解,仅供参考
无其他回答

c++ MFC 里的链表问题(内详)
链表是一种数据结构,就像是一个一个的珠子串起来的链子,每个珠子就是一个结构体变量(当然这是C语言中的说法,要是是C++的话,每个珠子就是一个对象了),这种数据结构可以很方便地的访问每个元素,一般它是与数组相对的,数组是串行的,按照索引来访问元素,而链表是靠结构体中存储的下一个元素的...

c++ 链表,,求指导,程序崩溃,line:1044
1.链表的最后一个节点的next的值,是否设置为NULL了,如果没有设置,到了最后一个节点的时候,就会出现崩溃.2.你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.3.考虑下在进入循环的第一次是否就有问题,因为循环里,并没...

c++ 链表,,求指导,程序崩溃,line:1044
你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.考虑下在进入循环的第一次是否就有问题,因为循环里,并没有判断p是否为NULL,如果p为NULL,p->next在这里也会引起崩溃 看了你贴的代码,在构造函数里,构造链表的时候,wh...

c++链表问题
链表的结构就是图中所示了,r就是S的指针域指向的下一个节点。提示:r的指针域不为NULL,不能作为链表的尾节点哦,要给r->link=NULL;

c++链表初始化 为什么会出问题
l=(E*)malloc(sizeof(E*));分配 长度错了,是sizeof(E)

C++的问题,大神们求解救
这个程序,就是用结构体(或类)保存每个员工信息,结构体直接写文件(或类操作按行读写文件),通过链表管理所有员工即可。你需要每次完整读取文件到内存链表,这样最大值编号就知道了,新建的在最大上加1 不同工程模式操作文件方法不同,但任何一种都满足你的需求。文件操作的追加模式,没什么可说的 ...

C++单链线性表的初始化问题
L->next=p; \/\/ █ 代表节点 <--- 代表指针 你那个程序指针是这样指的 █ <-- █ <-- █ <--- █for循环一结束就指向最后面的节点了 这样L是往后移动的, 所以输出时倒着输出 L-next存储p上次创建的节点的地址 p是后来创建的节点 所以后面节点总是指向前面的节点 ...

c++链表栈问题
1.建立抽象模型,说起来这件事得追溯到C++本身的结构上:从广义上看,类是一个数据操作集合体,即使数据结构也不外乎如是。那么我们必须知道栈需要什么——这是一切问题的起点。数据结构是数据模型的实现,围绕数据为中心,操作为主要手段的语义模型。真正具体化到C++的类中,我们就是要确定储存结构(...

C++链表合并编译正确,运行完跳出终止调试程序的框框
我没仔细看算法,但是有一个致命的问题,LinkList A,B会析构两次!因为你void LinkList::LinkSort(LinkList A,LinkList B)是值传递,这个函数执行完成后A,B就会析构,虽然与原来的A,b是不同的A,B,但后面那些节点地址相同,析构以后链表后面所有节点都释放掉了 然后返回原函数,函数结束后会...

想了解一下链表的知识,找了一个程序也看不太懂,麻烦高手帮帮忙,谢谢...
using namespace std;include "stdlib.h"include "stdio.h"struct list { int data;struct list *next;};typedef struct list node;typedef node *link;\/\/ 声明 link 是指向 node 的指针,即 node * 相当于 link void main(){ link ptr,head;int num,i;ptr=(link)malloc(sizeof(node));h...

相似回答