在尝试修改一个代码的时候,它不显示错,但是运行不了,求指导
用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#define MaxLen 10
typedef struct Student
{
long int studid;
char studname[20];
char studsex;
int studscore;
int studyear;
} DataType;
typedef struct
{
DataType Data[MaxLen];
int Length;
} SeqList;
void InitList(SeqList *L)
{
L->Length = 0;
printf("初始化顺序表成功!");
}
//建立顺序表,存储相应的数据
void CreateList(SeqList *L, int n)
{
int i;
for (i = 0; i < n + 1; i++)
{
printf("请输入第%d个元素:", i + 1);
printf("请输入学生的学号: ");
scanf("%ld", &L->Data[i].studid);
printf("请输入学生的姓名: ");
scanf("%s", &L->Data[i].studname);
printf("请输入学生的成绩: ");
scanf("%d", &L->Data[i].studscore);
printf("请输入学生的出生年份: ");
scanf("%d", &L->Data[i].studyear);
scanf("%d", &L->Data[i + 1]);
}
L->Length = i;
printf("建立顺序表成功!");
}
void ShowList(SeqList *L)
{
int i;
for (i = 0; i < L->Length; i++)
{
printf("学号: %ld\t", L->Data[i].studid);
printf("姓名: %s\t", L->Data[i].studname);
printf("成绩: %d\t", L->Data[i].studscore);
printf("出生年份: %d\t", L->Data[i].studyear);
printf("\n");
}
for (i = 1; i <= L->Length - 1; i++)
{
printf("%d->", L->Data[i]);
}
printf("%d", L->Data[i]);
}
int InsertElement(SeqList *L, int i, DataType x)
{
int j;
if (L->Length >= MaxLen)
{
printf("顺序表已满!");
return -1;
}
if (i < 1 || L->Length)
{
printf("插入位置出错!");
return 0;
}
if (i == L->Length + 1)
{
L->Data[i - 1] = x;
L->Length++;
return 1;
}
for (j = L->Length - 1; j >= i - 1; j--)
{
L->Data[j + 1] = L->Data[j];
}
L->Data[i - 1] = x;
L->Length++;
return 1;
}
int DelElement(SeqList *L, int i, DataType *x)
{
int j;
if (L->Length == 0)
{
printf("顺序表为空!");
return 0;
}
if (i < 1 || i > L->Length)
{
printf("不存在第%d个元素", i);
return 0;
}
*x = L->Data[i - 1];
for (j = i; j < L->Length; j++)
{
L->Data[j - 1] = L->Data[j];
}
L->Length--;
return 1;
}
void InsertSort(SeqList *sl)
{
int i, j;
for (i = 2; i < sl->Length; i++)
{
sl->Data[0] = sl->Data[i];
j = i - 1;
while (sl->Data[0].studscore < sl->Data[j].studscore)
{
sl->Data[j + 1] = sl->Data[j];
j = j - 1;
}
sl->Data[j + 1] = sl->Data[0];
}
}
void BubbleSort(SeqList *sl)
{
int i, j, exchange;
DataType temp;
int n = sl->Length;
for (i = 1; i < n; i++)
{
exchange = 0;
for (j = 1; j <= n - i; j++)
if (sl->Data[j].studscore > sl->Data[j + 1].studscore)
{
temp = sl->Data[j];
sl->Data[j] = sl->Data[j + 1];
sl->Data[j + 1] = temp;
exchange = 1;
}
if (exchange == 0)
return;
}
}
void Menu()
{
printf("\n========================= ");
printf("\n ");
printf("\n========================= ");
printf("\n 顺序表的各种操作 ");
printf("\n========================= ");
printf("\n| 1--建立顺序表 |");
printf("\n| 2--插入元素 |");
printf("\n| 3--删除元素 |");
printf("\n| 4--显示顺序表所有元素 |");
printf("\n| 5--初始化顺序表 |");
printf("\n| 6--求顺序表的长度 |");
printf("\n| 7--直接排序 |");
printf("\n| 0--返回 |");
printf("\n========================= ");
printf("\n 请输入菜单号(0-7):");
}
int main(int argc, char *argv[])
{
int menid, n, p;
SeqList *s, st, stuList, *L;
DataType x,*val,m;
s = &st;
L = &stuList;
val = &m;
Menu();
scanf("%d", &menid);
while (1)
{
switch (menid)
{
case 1:
printf("建立顺序表\n");
printf("请输入顺序表元素个数: ");
scanf("%d", &n);
CreateList(L, n);
break;
case 2:
printf("插入元素\n");
printf("请输入要插入的位置和值: ");
scanf("%d%d", &p, &x); //这里的x要输入Student的每个值的
InsertElement(L, p, x);
break;
case 3:
printf("删除元素\n");
printf("请输入要删除的位置: ");
scanf("%d", &p);
DelElement(L, p, val);
printf("已成功删除元素%d\n", *val);
break;
case 4:
printf("显示顺序表所有元素\n");
ShowList(L);
break;
case 5:
printf("初始化顺序表\n");
InitList(L);
break;
case 6:
printf("求顺序表的长度\n");
printf("该顺序表的长度是%d个元素\n", L->Length);
break;
case 7:
printf("对顺序表进行直接插入排序");
InsertSort(L);
break;
InsertSort(L);
break;
case 0:
printf("退出程序\n");
return 0;
break;
}
printf("\n请输入菜单号 (0-7): ");
scanf("%d", &menid);
}
return 0;
}
无法正常运行
我尝试更换输入的那个x结构体,但是还是没有成功
我想要列表功能能够正常运行