为什么能编译却不能运行
#include<stdio.h>#include<math.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct student {
int num; char name[20];
int old;
int phone;
struct student*next; }Student;
char ch;
Student*p,*q,*s,*head;
Student * creat()
{
Student*p;
head=(Student*)malloc(sizeof(Student));
s=head; head->next=NULL;
while((ch=getchar( ))!='0' )
{
p=(Student*)malloc(sizeof(Student));
printf("学号: ");
scanf("%d",&p->num);
printf("姓名: ");
fflush(stdin);
scanf("%s",&p->name[20]);
printf("年龄: ");
scanf("%d",&p->old);
printf("电话: ");
scanf("%d",&p->phone);
s->next=p;
s=p;
p->next=NULL;
printf("0键结束输入,非0键继续");
ch=getchar( );
}
return head;
}
Student * insert(Student*h)
{
int x;
Student*s;
printf("输入插入学生前面的学号:");
scanf("%d",&x);
q=head;
p=head->next;
s=(Student*)malloc(sizeof(Student));
printf("输入学号:");
fflush(stdin); scanf("%d",&p->num);
printf("输入姓名:"); fflush(stdin); scanf ("%s",&p->name[20]);
printf("输入年龄:"); scanf("%d",&p->old);
printf("输入电话"); scanf("%d",&p->phone);
while(p!=NULL&&p->num!=x) {
{
q=p;
p=p->next;
} q->next=s; s->next=p;
}
return head;
}
void output(Student*h)
{ p=head;
printf("学号 姓名 年龄 电话号码\n\n");
for(;p!=NULL;p=p->next) printf("%d%s%d%d",p->num,p->name[20],p->old,p->phone);
}
Student* delet(Student*h)
{
int x; printf("删除该学生信息的学号是: "); scanf("%d",&x); p=head; while(p->next!=NULL&&p->next->num!=x)p++; if(p->next==NULL) printf("\n 该学号不存在 !"); else {q=p->next; p->next=q->next; free(q);
}
return head;
}
void find(Student *)
{
Student*p; p=head; printf("请输入学号: "); char x; scanf("%d",&x); while(p&&p->num!=x) p=p->next; printf("学号 姓名 年龄 电话号码\n\n"); printf("%d%s%d%d",p->num,p->name[20],p->old,p->phone);
}
int main()
{ int cord;
do{ printf(" 主菜单 \n"); printf(" 1 建立线性表 \n"); printf(" 2 插入一个元素 \n"); printf(" 3 显示 \n"); printf(" 4 删除一个元素 \n"); printf(" 5 查找 \n"); printf(" 6 结束程序运行 \n"); printf("----------------------\n"); printf(" 请输入您的选择(1,2,3,4,5)"); scanf("%d",&cord); switch(cord) { case 1: creat();break; case 2: insert(head);break; case 3: output(head);break; case 4: delet(head);break; case 5: find(head);break; case 6:exit(0);
} }while(cord<=6);
return 0; }
[ 本帖最后由 qwxue 于 2011-11-21 21:23 编辑 ]