visual studio2022在字符串链表结点时程序直接结束
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAXSIZE 100
typedef struct
{
long int num;
char name[20];
char sex[25];
float score;
}ElemType;
typedef struct node
{
ElemType data;
struct node* next;
}LNode, * LinkList;
LinkList Creat_LinkList1()
{
LNode* s;
ElemType x;
LinkList H = (LinkList)malloc(sizeof(LNode));
H->next = NULL;
printf("在链表的头部插入结点建立单链表");
printf("\n====================输入===================\n");
printf("学号(8),姓名(10),性别(3),成绩:(输入学号为O结束)\n");
scanf_s("%d%s%s%f", &x.num, x.name, x.sex, &x.score);
while (x.num != 0)
{
s = (LinkList)malloc(sizeof(LNode));
s->data.num = x.num;
strcpy_s(s->data.name, x.name);
strcpy_s(s->data.sex, x.sex);
s->data.score = x.score;
s->next = H->next;
H->next = s;
scanf_s("%d%s%s%f", &x.num, x.name, x.sex, &x.score);
}
return H;
}
int Length_LinkList(LinkList H)
{
LNode* p = H;
int j = 0;
while (p->next)
{
p = p->next;
j++;
}
return j;
}
void print_linklist(LinkList H)
{
LNode* p;
p = H->next;
printf("===================显示=====================\n");
printf("学号\t 姓名\t性别\t 成绩\n");
while (p)
{
printf("%-8d%10s\t%4s%7.0f\n", p->data.num, p->data.name, p->data.sex, p->data.score);
p = p->next;
}
}
LNode* Find_LinkList(LinkList H)
{
LNode* p;
int k, num, cz, j = 0;
char name[10];
printf("===========================\n");
printf("1、按序号查询\n");
printf("1、按学号查询\n");
printf("2、按姓名查询\n");
printf("===========================\n");
printf("请选择: ");
p = H->next;
scanf_s("%d", &cz);
switch (cz)
{
case 1:printf("请输入要查找学生的序号:");
scanf_s("%d", &k);
while (p != NULL && j < k)
{
p = p->next; j++;
}
if (j == k) return p;
else return p;
else return NULL;
case 2:printf("请输入要查找学生的学号:");
scanf_s("%d", &num);
while (p != NULL && p->data.num != num)
p = p->next;
return p;
case 3:printf("请输入要查找学生的姓名:");
scanf_s("%s", name);
while (p && strcmp(p->data.name, name) != 0)
p = p->next;
return p;
default:printf("输入有误。");
return NULL;
}
}
LinkList Get_LinkList(LinkList H, int k)
{
LNode* p = H; int j = 0;
while (p->next != NULL && j < k)
{
p = p->next; j++;
}
if (j == k) return p;
else return NULL;
}
int Insert_LinkList(LinkList H, int i, LNode* x)
{
LNode* p, * s;
p = Get_LinkList(H, i - 1);
if (p == NULL)
{
return 0;
}
else
{
s = (LinkList)malloc(sizeof(LNode));
s->data = x->data;
s->next = p->next;
p->next = s; return 1;
}
}
int main()
{
LinkList h;
LNode* q; int i;
h = Creat_LinkList1();
print_linklist(h);
printf("**************************************\n");
printf("添加学生信息\n");
printf("**************************************\n");
printf("\n学号(8) 姓名(10) 性别(3) 成绩\n");
printf("*************************************\n");
q = (LNode)malloc(sizeof(LNode));
scanf_s("%d%s%s%f", &q->data.num, q->data.name, q->data.sex, &q->data.score);
printf("请输入要插入的位置:\n");
scanf_s("%d", &i);
if (Insert_LinkList(h, i, q) == 0)
{
printf("没有合适的插入点!\n");
}
else
{
printf("结点已经插入\n");
}
print_linklist(h);
}
Windows11,摆摊各位帮忙指点一下