这个哪出错了 编译没错运行不对
编写一个程序,建立一个单向链表,每个结点包括:学号、姓名、成绩。建立链表时若输入成绩为负数就结束。然后输入一个学号,如果链表中有学号等于此输入学号的结点,则将其删除。#include<stdio.h>
#include<stdlib.h>
struct stu
{
long num;
char name[20];
int score;
}type[5];
struct node
{
struct stu type[5];
struct node *next;
}st[5],*p,*q;
int delete_node(struct node *h,int x)
{
q=h;p=h->next;
if((p!='\0')&&(p->type->num!=x))
{
while((p!='\0')&&(p->type->num!=x))
{
q=p;p=p->next;
}
if(p->type->num==x)
{
q->next=p->next;
free(p);
}
}
return 0;
}
int main(void)
{
int i;
long x;
for(i=0;i<5;i++)
{
scanf("%ld",&st[i].type[i].num);
scanf("%s",st[i].type[i].name);
scanf("%d",st[i].type[i].score);
if(st[i].type[i].score<0)
break;
}
scanf("%ld",&x);
for(i=0;i<5;i++)
{
printf("%ld\t",st->type[i].num);
printf("%s\t",st->type[i].name);
printf("%d\t",st->type[i].score);
}
printf("\n");
delete_node(st,&x);
for(i=0;i<4;i++)
{
printf("%ld\t",st[i].type[i].num);
printf("%s\t",st[i].type[i].name);
printf("%d\t",st[i].type[i].score);
}
return 0;
}