小系统有点小问题,为什么会出现这个错误?

SMITH_JAT 2014-06-18 12:34:58
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{ long number;
char name[10];
int age;
char sex[4];
char birth[10];
char address[30];
char tele[12];
struct student *next;
}STU,*Pointer;
void read(Pointer Head);
void insert(Pointer Head);
void show(Pointer Head);
void search(Pointer Head);
void update(Pointer Head);
void dele(Pointer Head);
void save(Pointer Head);

int main()
{
Pointer Head=NULL;
int i;
printf("*************************************************\n");
printf("------------欢迎使用学生信息管理系统-------------\n");
printf("*************************************************\n");
do
{
printf("\n");
printf("0---读取现有文件\n");
printf("1---录入\n");
printf("2---浏览\n");
printf("3---查询\n");
printf("4---修改\n");
printf("5---删除\n");
printf("6---保存并退出\n");
printf("请选择一项任务:");
scanf("%d",&i);
switch(i)
{
case 0: read(Head);break;
case 1: insert(Head);break;
case 2: show(Head);break;
case 3: search(Head);break;
case 4: update(Head);break;
case 5: dele(Head);break;
case 6: save(Head);break;
default:printf("错误选择!请重选");break;
}
}while(i!=6);
save(Head);
return 0;
}

void read(Pointer *Head)
{ FILE *fp;
Pointer p,q,r;
int count=0;
r=(Pointer)malloc(sizeof(STU));
r->next=NULL;
if(r==NULL)
printf("分配空间失败!");
*Head=r;
if((fp=fopen("d:\\student.txt","rb"))==NULL)
printf("打开文件失败!!");
while(!feof(fp))
{
p=(Pointer)malloc(sizeof(STU));
if(p==NULL)
printf("分配空间失败!");
}
q=*Head;
*Head=q->next;
if(count==0)
printf("文件没有数据!!");
fclose(fp);
printf("\n读入文件成功,记录总数为:%d\n",count);
fclose(fp);

}

void insert(Pointer *Head)
{
int number;
Pointer p,q,r;
printf("请输入学号:");
scanf("%ld",&number);
p=q=*Head;
while(p!=NULL)
{
if(p->number==number)
{printf("已经有相同的学号!!");return;}
else
{q=p;p=p->next;}
}
r=(Pointer)malloc(sizeof(STU));
r->next=NULL;
if(r==NULL)
{printf("分配空间失败!");return;}
if(q==NULL)
*Head=r;
else
q->next =r;
r->number=number;
printf("请输入姓名:");
scanf("%s",r->name);
printf("请输入年龄:");
scanf("%d",&r->age);
printf("请输入性别:");
scanf("%s",r->sex);
printf("请输入出生年月:");
scanf("%s",r->birth);
printf("请输入地址:");
scanf("%s",r->address);
printf("请输入联系电话:");
scanf("%s",r->tele);
}

void show(Pointer Head)
{
Pointer p;
p=Head;
if(p==NULL)
{
printf("没有数据!!");
return;
}
while(p!=NULL)
{
printf("\n");
printf("学号:%-16ld",p->number);
printf("姓名:%-12s",p->name);
printf("年龄:%-10d",p->age);
printf("性别:%-4s\n",p->sex);
printf("出生年月:%-12s",p->birth);
printf("地址:%-30s\n",p->address);
printf("联系方式:%-12s",p->tele);
p=p->next;
}
}

void search(Pointer Head)
{
int t;
int flag;
long number;
char name[10];
Pointer p;

while(1)
{ printf("\n------------------\n");
printf("1.按学号查询\n");
printf("2.按姓名查询\n");
printf("3.退出本菜单\n");
printf("------------------\n");
printf("请选择子菜单编号:");
scanf("%d",&t);
flag=1;
switch(t)
{
case 1: printf("请输入学号:");
scanf("%ld",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)

{ printf("\n");
printf("学号:%-16ld",p->number);
printf("姓名:%-12s",p->name);
printf("年龄:%-10d",p->age);
printf("性别:%-4s\n",p->sex);
printf("出生年月:%-12s",p->birth);
printf("地址:%-30s\n",p->address);
printf("联系方式:%-12s",p->tele);
flag=0;
}
else
p=p->next; }
if(flag) printf("没有查询到!!");break;
case 2: printf("请输入姓名:");
scanf("%s",name);
flag=1;
p=Head;
while(p!=NULL&&flag)
{if(strcmp(p->name,name)==0)

{ printf("\n");
printf("学号:%-16ld",p->number);
printf("姓名:%-12s",p->name);
printf("年龄:%-10d",p->age);
printf("性别:%-4s\n",p->sex);
printf("出生年月:%-12s",p->birth);
printf("地址:%-30s\n",p->address);
printf("联系方式:%-12s",p->tele);
flag=0;
}else
p=p->next;}
if(flag) printf("没有查询到!");

case 3:return;
default:printf("请在1-3之间选择\n");
}
}
}
void update(Pointer Head)
{
int flag=1;
long number;
Pointer p;
printf("请输入学号:");
scanf("%ld",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
printf("请输入姓名:");
scanf("%s",p->name);
printf("请输入年龄:");
scanf("%d",&p->age);
printf("请输入性别:");
scanf("%s",p->sex);
printf("请输入出生年月:");
scanf("%s",p->birth);
printf("请输入地址:");
scanf("%s",p->address);
printf("请输入联系电话:");
scanf("%s",p->tele);
flag=0;
}
else
p=p->next;
}
if(flag)
printf("没有查询到!!");
}

void dele(Pointer *Head)
{
int flag=1;
long number;
Pointer p,q;
printf("请输入学号:");
scanf("%ld",&number);
p=q=*Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
if(p==*Head)
{
*Head=p->next;
free(p);
}
else
{
q->next=p->next;
free(p);
}
flag=0;
}
else
{q=p;p=p->next;}
}
if(flag)
printf("没有查询到!!");
}

void save(Pointer Head)
{
FILE* fp;
Pointer p;
if((fp=fopen("d:\\student.txt","wb"))==NULL)
{
printf("打开文件失败!!");
exit(1);
}
for(p=Head;p!=NULL;p=p->next)
fwrite(p,sizeof(STU),1,fp);
}
...全文
89 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zybjtu 2014-06-18
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student {
    long number;
    char name[10];
    int age;
    char sex[4];
    char birth[10];
    char address[30];
    char tele[12];
    struct student *next;
} STU, *Pointer;
void read(Pointer * Head);
void insert(Pointer * Head);
void show(Pointer Head);
void search(Pointer Head);
void update(Pointer Head);
void dele(Pointer * Head);
void save(Pointer Head);

int main()
{
    Pointer Head = NULL;
    int i;
    printf("*************************************************\n");
    printf
	("------------欢迎使用学生信息管理系统-------------\n");
    printf("*************************************************\n");
    do {
	printf("\n");
	printf("0---读取现有文件\n");
	printf("1---录入\n");
	printf("2---浏览\n");
	printf("3---查询\n");
	printf("4---修改\n");
	printf("5---删除\n");
	printf("6---保存并退出\n");
	printf("请选择一项任务:");
	scanf("%d", &i);
	switch (i) {
	case 0:
	    read(Head);
	    break;
	case 1:
	    insert(Head);
	    break;
	case 2:
	    show(Head);
	    break;
	case 3:
	    search(Head);
	    break;
	case 4:
	    update(Head);
	    break;
	case 5:
	    dele(Head);
	    break;
	case 6:
	    save(Head);
	    break;
	default:
	    printf("错误选择!请重选");
	    break;
	}
    } while (i != 6);
    save(Head);
    return 0;
}

void read(Pointer * Head)
{
    FILE *fp;
    Pointer p, q, r;
    int count = 0;
    r = (Pointer) malloc(sizeof(STU));
    r->next = NULL;
    if (r == NULL)
	printf("分配空间失败!");
    *Head = r;
    if ((fp = fopen("d:\\student.txt", "rb")) == NULL)
	printf("打开文件失败!!");
    while (!feof(fp)) {
	p = (Pointer) malloc(sizeof(STU));
	if (p == NULL)
	    printf("分配空间失败!");
    }
    q = *Head;
    *Head = q->next;
    if (count == 0)
	printf("文件没有数据!!");
    fclose(fp);
    printf("\n读入文件成功,记录总数为:%d\n", count);
    fclose(fp);

}

void insert(Pointer * Head)
{
    int number;
    Pointer p, q, r;
    printf("请输入学号:");
    scanf("%ld", &number);
    p = q = *Head;
    while (p != NULL) {
	if (p->number == number) {
	    printf("已经有相同的学号!!");
	    return;
	} else {
	    q = p;
	    p = p->next;
	}
    }
    r = (Pointer) malloc(sizeof(STU));
    r->next = NULL;
    if (r == NULL) {
	printf("分配空间失败!");
	return;
    }
    if (q == NULL)
	*Head = r;
    else
	q->next = r;
    r->number = number;
    printf("请输入姓名:");
    scanf("%s", r->name);
    printf("请输入年龄:");
    scanf("%d", &r->age);
    printf("请输入性别:");
    scanf("%s", r->sex);
    printf("请输入出生年月:");
    scanf("%s", r->birth);
    printf("请输入地址:");
    scanf("%s", r->address);
    printf("请输入联系电话:");
    scanf("%s", r->tele);
}

void show(Pointer Head)
{
    Pointer p;
    p = Head;
    if (p == NULL) {
	printf("没有数据!!");
	return;
    }
    while (p != NULL) {
	printf("\n");
	printf("学号:%-16ld", p->number);
	printf("姓名:%-12s", p->name);
	printf("年龄:%-10d", p->age);
	printf("性别:%-4s\n", p->sex);
	printf("出生年月:%-12s", p->birth);
	printf("地址:%-30s\n", p->address);
	printf("联系方式:%-12s", p->tele);
	p = p->next;
    }
}

void search(Pointer Head)
{
    int t;
    int flag;
    long number;
    char name[10];
    Pointer p;

    while (1) {
	printf("\n------------------\n");
	printf("1.按学号查询\n");
	printf("2.按姓名查询\n");
	printf("3.退出本菜单\n");
	printf("------------------\n");
	printf("请选择子菜单编号:");
	scanf("%d", &t);
	flag = 1;
	switch (t) {
	case 1:
	    printf("请输入学号:");
	    scanf("%ld", &number);
	    p = Head;
	    while (p != NULL && flag) {
		if (p->number == number)
		{
		    printf("\n");
		    printf("学号:%-16ld", p->number);
		    printf("姓名:%-12s", p->name);
		    printf("年龄:%-10d", p->age);
		    printf("性别:%-4s\n", p->sex);
		    printf("出生年月:%-12s", p->birth);
		    printf("地址:%-30s\n", p->address);
		    printf("联系方式:%-12s", p->tele);
		    flag = 0;
		} else
		    p = p->next;
	    }
	    if (flag)
		printf("没有查询到!!");
	    break;
	case 2:
	    printf("请输入姓名:");
	    scanf("%s", name);
	    flag = 1;
	    p = Head;
	    while (p != NULL && flag) {
		if (strcmp(p->name, name) == 0)
		{
		    printf("\n");
		    printf("学号:%-16ld", p->number);
		    printf("姓名:%-12s", p->name);
		    printf("年龄:%-10d", p->age);
		    printf("性别:%-4s\n", p->sex);
		    printf("出生年月:%-12s", p->birth);
		    printf("地址:%-30s\n", p->address);
		    printf("联系方式:%-12s", p->tele);
		    flag = 0;
		} else
		    p = p->next;
	    }
	    if (flag)
		printf("没有查询到!");

	case 3:
	    return;
	default:
	    printf("请在1-3之间选择\n");
	}
    }
}

void update(Pointer Head)
{
    int flag = 1;
    long number;
    Pointer p;
    printf("请输入学号:");
    scanf("%ld", &number);
    p = Head;
    while (p != NULL && flag) {
	if (p->number == number) {
	    printf("请输入姓名:");
	    scanf("%s", p->name);
	    printf("请输入年龄:");
	    scanf("%d", &p->age);
	    printf("请输入性别:");
	    scanf("%s", p->sex);
	    printf("请输入出生年月:");
	    scanf("%s", p->birth);
	    printf("请输入地址:");
	    scanf("%s", p->address);
	    printf("请输入联系电话:");
	    scanf("%s", p->tele);
	    flag = 0;
	} else
	    p = p->next;
    }
    if (flag)
	printf("没有查询到!!");
}

void dele(Pointer * Head)
{
    int flag = 1;
    long number;
    Pointer p, q;
    printf("请输入学号:");
    scanf("%ld", &number);
    p = q = *Head;
    while (p != NULL && flag) {
	if (p->number == number) {
	    if (p == *Head) {
		*Head = p->next;
		free(p);
	    } else {
		q->next = p->next;
		free(p);
	    }
	    flag = 0;
	} else {
	    q = p;
	    p = p->next;
	}
    }
    if (flag)
	printf("没有查询到!!");
}

void save(Pointer Head)
{
    FILE *fp;
    Pointer p;
    if ((fp = fopen("d:\\student.txt", "wb")) == NULL) {
	printf("打开文件失败!!");
	exit(1);
    }
    for (p = Head; p != NULL; p = p->next)
	fwrite(p, sizeof(STU), 1, fp);
}
没细看,但编译期错误是你的声明和定义不一致。参数是二级指针的,你传了一级指针。 目前可以通过编译了。
zybjtu 2014-06-18
  • 打赏
  • 举报
回复
有什么错误?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧