#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "windows.h"
#include "stdlib.h"
#include "string.h"
#define status int;
#define MAXSIZE 20//顺序表最大长度
/*定义顺序表*/
typedef struct
{
int sno[MAXSIZE];
char name[MAXSIZE][10];
char gender[MAXSIZE];
int score[MAXSIZE];
int length;
}sqlist;
/*初始化顺序表*/
void initlist(sqlist* l)
{
l->length = 0;
printf("initialization succeeded\n");
}
void creatlist(sqlist* l, int a[],char b[][10], char c[], int d[], int n)
{
if (n > MAXSIZE)
{
printf("room is not enough\n");
exit(0);
}
for (int k = 0; k < n; k++)
{
l->sno[k] = a[k];
strcpy(l->name[k] , b[k]);
l->gender[k] = c[k];
l->score[k] = d[k];
}
l->length = n;
printf("linear list is created successfully\n");
}
void list_insert(sqlist* l, int pos, int sno, char name[], char gender, int score)
{
if (pos > l->length || pos < 1)
{
printf("over_range\n");
exit(0);
}
if (l->length + pos > MAXSIZE)
{
printf("room is not enouth\n");
exit(0);
}
for (int i = l->length - 1; i >= pos-1; i--)
{
l->sno[i + 1] = l->sno[i];
strcpy(l->name[i + 1],l->name[i]);
l->gender[i + 1] = l->gender[i];
l->score[i + 1] = l->score[i];
}
l->sno[pos-1] = sno;
strcpy(l->name[pos - 1], name);
l->gender[pos-1] = gender;
l->score[pos-1] = score;
l->length++;
printf("insert successfully\n");
}
void list_findfail(sqlist *l)
{
int cnt=0;
if (l)
{
for (int i = 0; i < l->length; i++)
{
if (l->score[i] < 60)
cnt++;
}
}
printf("total number of failed students is %d\n", cnt);
}
void list_delete(sqlist* l, int pos)
{
if (l)
{
if (pos<1 || pos>l->length)
{
printf("range_error\n");
exit(0);
}
for (int i = pos - 1; i < l->length; i++)
{
l->sno[i] = l->sno[i + 1];
strcpy(l->name[i], l->name[i + 1]);
l->gender[i] = l->gender[i + 1];
l->score[i] = l->score[i + 1];
}
l->length--;
printf("delete successfully\n");
}
}
void list_deletefail(sqlist* l)
{
for (int i = 0; i < l->length; i++)
{
if (l->score[i] < 60)
list_delete(l, i + 1);
}
printf("delete successfully\n");
}
void list_print(sqlist* l)
{
int i = 0;
if (l)
{
printf("Sno\tName\t\tGender\tScore\n");
for (; i < l->length; i++)
{
printf("%d\t%s\t%c\t%d\n", l->sno[i], l->name[i], l->gender[i], l->score[i]);
}
}
}
int main()
{
int menu;
sqlist l;
int sno[5] = { 1001,1002,1004,1005,1006 }, score[5] = { 88,66,90,77,24 };
char name[5][10] = { "ChenChen","WangGang","ShangFang","ChengPing","WangPing" }, gender[5] = { 'M','M','F','F','M' };
exe:
printf("MENU:\n1.初始化空表\t2.创建循序表\t3.打印循序表\n4.插入李明\t5.删除\t6.统计不及格人数\n7.删除不及格学生信息\t8.退出\n");
printf("please input your command:\n");
scanf("%d", &menu);
if (menu == 1)
{
initlist(&l);
printf("\n\n\n");
goto exe;
}
if (menu == 2)
{
creatlist(&l, sno, name, gender, score, 5);
printf("\n\n\n");
goto exe;
}
if (menu == 3)
{
list_print(&l);
printf("\n\n\n");
goto exe;
}
if (menu == 4)
{
list_insert(&l, 3, 1003, "LiMing", 'M', 42);
printf("\n\n\n");
goto exe;
}
if (menu == 5)
{
int POS;
printf("please input the position number:\n");
scanf("%d", &POS);
list_delete(&l, POS);
printf("\n\n\n");
goto exe;
}
if (menu == 6)
{
list_findfail(&l);
printf("\n\n\n");
goto exe;
}
if (menu == 7)
{
list_deletefail(&l);
printf("\n\n\n");
goto exe;
}
if (menu == 8)
{
goto exit;
}
exit:
return 0;
}
这个是删除之前的表
这个是删除之后的表,那个性别变成了?,这是为什么呢?
求解决,我觉得应该是delete函数出现问题了。