C语言:键盘输入1创建顺序表,输入2插入数据,输入3查询数据,输入4删除数据.要求顺序表中的数据为结构体类型

#include <stdio.h>
#include <stdlib.h>
#define listsize 100
typedef struct /*建立结构体类型*/
{
long int num;
char name[20];
char gender;
int age;
}student;
typedef struct
{
student *stu;
int length;
}sqlist;
void create(sqlist *l) /*创建*/
{
int i;
printf("请输入元素个数:\n");
scanf("%d",&l->length);
printf("请输入%d个元素:\n",l->length);
for(i=0;i<l->length;i++)
scanf("%ld%s%c%d",&l->(stu+i)->num,l->(stu+i)->name,&l->(stu+i)->gender,&l->(stu+i)->age);
}
void search(sqlist *l) /*查询*/
{
student e;
int i;
printf("请输入需要查询的记录:\n");
scanf("%ld%s%c%d",&l->(e->num),l->(e->name),&l->(e->gender),&l->(e->age));
for(i=0;i<l->length;i++)
if(l->(stu+i)==e)
{
printf("这条记录在该表的第%d行。\n",i);
break;
};
if(i>=l->length) printf("此条记录不存在于该表中。\n");
}
void insert(sqlist *l) /*插入*/
{
student x;
int i,j;
printf("请输入需要插入的记录:\n");
scanf("%ld%s%c%d",&l->(x->num),l->(x->name),&l->(x->gender),&l->(x->age));
printf("请输入需要插入的位置:\n");
scanf("%d",&i);
if(l->length==listsize) printf("该表已满!\n");
for(j=l->length-1;j>=i;j--)
l->(stu+j+1)=l->(stu+j);
l->(stu+i)=x;
l->length++;
}
void delet(sqlist *l) /*删除*/
{
int i,j;
printf("请输入需要删除记录的位置:\n");
scanf("%d",&i);
if(l->length==0) printf("该表为空表!\n");
for(j=i;j<l->length-1;j++)
l->(stu+j)=l->(stu+j+1);
l->length--;
}
void main()
{
sqlist *l;
int n;
l->stu= (student *)malloc(sizeof(student));
l->length=0;
printf("-提示-\n-创建顺序表:1\n-插入记录:2\n-查询记录:3\n-删除记录:4\n请输入您要执行的操作!\n");
n=getchar();
switch(n)
{
case '1':create(l);break;
case '2':
{
if(l->length==0) printf("请先创建顺序表!\n");
else insert(l);
break;
}
case '3':
{
if(l->length==0) printf("请先创建顺序表!\n");
else search(l);
break;
}
case '4':
{
if(l->length==0) printf("请先创建顺序表!\n");
else delet(l);
break;
}
default: printf("无效输入!\n");
}
}
求改错。

第1个回答  2013-03-28
typedef struct
{
student stu[listsize];
int length;
}sqlist;

int isEqual(const student *st0,const student *st1) /* 比较函数 */
{
if(st0->num!=st1->num){return 0;}
if(0!=strcmp(st0->name,st1->name))return 0;
if(st0-> gender!=st1->gender)return 0;
if(st0->age!=st1->age)return 0;
return 1;
}

int main()
{

sqlist lst;
sqlist *l=&lst;

int n;
/* l->stu=(student *)malloc(sizeof(student)); */
/* 由于有最大数据容量,直接定义数组,更好,这个分配内存就不需要了。 */

...
return 0;
}
void search(sqlist *l) /*查询*/
{
student e;
int i;
printf("请输入需要查询的记录:\n");
scanf("%ld%s%c%d",&l->(e->num),l->(e->name),&l->(e->gender),&l->(e->age));
for(i=0;i<l->length;i++)
/* if(l->(stu+i)==e) */
/*不能这么比较,做个比较函数,用来比较,然后像下面那样比较*/
if(isEqual(l->(stu+i),&e))
{
printf("这条记录在该表的第%d行。\n",i);
break;
};
if(i>=l->length) printf("此条记录不存在于该表中。\n");
}本回答被提问者和网友采纳
第2个回答  2013-03-28
自己上机调试比较好。
相似回答