|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
struct Student
{
char sname[10];
int sno;
int age;
char ssex[2];
int phone;
struct Student *next;
};
void inget(struct Student *student)
{
printf("请输入姓名:");
scanf("%s",student->sname);
printf("请输入年龄:");
scanf("%d",&student->age);
printf("请输入学号:");
scanf("%d",&student->sno);
printf("请输入性别:");
scanf("%s",student->ssex);
printf("请输入电话:");
scanf("%d",&student->phone);
}
void addStudent(struct Student **head)
{
struct Student *student;
static struct Student *tail;
student = (struct Student *)malloc(sizeof(struct Student));
if(student == NULL)
{
printf("内存分配失败!\n");
exit(1);
}
inget(student);
if(*head != NULL)
{
tail->next = student; //应该是这里有问题,但看小甲鱼就是这么写的
student->next = NULL;
}
else
{
*head = student;
student ->next = NULL;
}
tail = student;
}
void printStudent(struct Student *head)
{
while(head != NULL)
{
printf("姓名:%s\n",head->sname);
printf("年龄:%d\n",head->age);
printf("学号:%d\n",head->sno);
printf("性别:%s\n",head->ssex);
printf("电话:%d\n",head->phone);
head = head ->next;
}
}
void freeStudent(struct Student *head)
{
struct Student *temp;
while(head != NULL)
{
temp = head;
head = head -> next;
free(temp);
}
}
int main()
{
struct Student *head;
char ch;
while(1)
{
printf("请问是否需要录入数据(Y/N):");
do
{
ch =getchar();
}while(ch != 'Y'&&ch != 'N');
if(ch == 'Y')
{
addStudent(&head);
}
else
{
break;
}
}
printf("请问是否需要打印数据(Y/N):");
do
{
ch = getchar();
}while(ch != 'Y' && ch != 'N');
if(ch == 'Y')
{
printStudent(head);
}
freeStudent(head);
}
错误如下:
本帖最后由 两手空空儿 于 2022-9-22 17:07 编辑
- int main()
- {
- struct Student *head;
- char ch;
- while(1)
复制代码
head 没有初始化为NULL,是个野指针,所以加第一条的时候就出错!!!!
- inget(student);
- if(*head != NULL) ////////////问题在这里,第一次调用的时候head的值不是NULL
- {
- tail->next = student; //应该是这里有问题,但看小甲鱼就是这么写的
- student->next = NULL;
- }
复制代码
tail的指针也是野的,以后凡是定义指针的时候就直接=NULL;
|
|