循环出不来了怎么办?


#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>

typedef struct{
    int no;//学号
    char name[10];//姓名
    int score;//成绩
}student;
typedef struct node{
    student stu;//学生
    struct node * next;//后继指针
}LinkList;//单链表结点结构,每个结点包括学生及后继

LinkList *inputdata(){                //输入一个学生的信息 
    LinkList *s=NULL;
    int no;
    char name[10];
    int score;
    s = (LinkList *)malloc(sizeof(LinkList));
    printf("\n");
    
    printf("请输入学号(不超过4位):");
    
    scanf("%d",s->stu.no);
    if(no==-1)
    
    
    return s;


    printf("请输入姓名(不超过4个汉字):");
    scanf("%s",s->stu.name);
    printf("请输入成绩(整数):");
    scanf("%d",&s->stu.score);
    return s;
}
void printElem(LinkList *p)          //显示一个学生的信息 
{
    printf("\n\n\nno\t\tname\t\tscore:");
    printf("\n%d",p->stu.no);
    printf("\t\t");
    printf("%s",p->stu.name);
    printf("\t\t");
    printf("%-4d\n",p->stu.score);
    
}
void printElemALL(LinkList *L)      //显示全部学生的信息 
{
    LinkList *p;
    p=L->next;
    printf("\n\n\nno\t\tname\t\tscore:");
    while(p)
    {
        printf("\n%d",p->stu.no);
        printf("\t\t");
        printf("%s",p->stu.name);
        printf("\t\t");
        printf("%-4d\n",p->stu.score);
        p=p->next;
    }
}

LinkList* createList(){          //尾插法创建带头结点单链表 
    LinkList *L,*s,*r;
    L=(LinkList  *)malloc(sizeof(LinkList));
    r=L;
    printf("请输入学生信息,当学号no为-1时结束;\n\n");
    while(1){
    s=inputdata();
    if(!s)  break;
    r->next=s;
    r=s;
}    
r->next=NULL;
printElemALL(L);
return L;
    
}
void locateElem(LinkList *L, int ch)   //按学号查找学生 
{
    int no;
    LinkList *p=L->next;
    while(p&&(no==ch))
    p=p->next;
    if(!p)  printf("\n\n\tDon't find the student!\n");
    else  printElem(p);
    
}


void insertElem(LinkList *L,int ch)  //在带头结点的单链表中指定学号前插入学生 
{
    int no;
    LinkList *s,*p;
    p=L;
    while((p->next)&&(no==ch))
    p=p->next;
    s=inputdata();
    s->next=p->next;
    p->next=s;
    
}
void deleteElem(LinkList *L,int ch)    //删除给定学号的学生信息 
{
    int no;
    LinkList*p,*q;
    p=L;
    while ((p->next)&&(no==ch))
    {
        p=p->next;
    }
    if(!p->next)
    {
        printf("\n\n\tDon't find the student!\n");
    }
    else
    {
        q=p->next;
        printf("\n\ndeletd student's information:");
        printElem(q);
        p->next=q->next;
        free(q);
        printf("\n\nall student's information:");
        printElemALL(L);
    }
    
    
}




void main(){
    printf("%s","20211齐可钰\n\n"); 
    LinkList  *L;
    int ch;
    char name[10];
    int a,b=1;
    printf("=========================================================\n\n");
    printf("               单链表结构的学生成绩管理系统\n\n");
    printf("=========================================================\n\n");
    while(b)
    {
        printf("\n\n");
        printf("<1>创建  <2>指定学号前插入  <3>按学号删除\n");
        printf("<4>按学号查找  <5>显示所有学生  <6>退出\n");
        printf("\n请输入功能选项:");
        scanf("%d",&a);
        switch (a)
        {
            case 1:L=createList();
            break;
            case 2:printf("\n输入待插入数据在哪个学号前:");
            scanf("%d",ch);
            insertElem(L,ch);
            break;
            case 3: printf("\n输入待删除学生的学号:");
            scanf("%d",ch);
            deleteElem(L,ch);
            break;
            case 4:printf("\n输入待查找学生的学号:");
            scanf("%d",ch);
            locateElem(L,ch);
            break;
            case 5:printElemALL(L);
            break;
            case 6:printf("\n已退出\n");
            b=0;
            break;
        }
    }
    
}

img

两个判断条件有问题,其他还没看出来

LinkList *inputdata(){                //输入一个学生的信息 
    LinkList *s=NULL;
    //int no;
    char name[10];
    int score;
    s = (LinkList *)malloc(sizeof(LinkList));
    printf("\n");
    printf("请输入学号(不超过4位):");
    scanf("%d",s->stu.no);
    if(s->stu.no==-1)
    return s;
    printf("请输入姓名(不超过4个汉字):");
    scanf("%s",s->stu.name);
    printf("请输入成绩(整数):");
    scanf("%d",&s->stu.score);
    return s;
}
LinkList* createList(){          //尾插法创建带头结点单链表 
    LinkList *L,*s,*r;
    L=(LinkList  *)malloc(sizeof(LinkList));
    r=L;
    printf("请输入学生信息,当学号no为-1时结束;\n\n");
    while(1){
    s=inputdata();
    if(s->stu.no==-1)  break;
    r->next=s;
    r=s;
}    
r->next=NULL;
printElemALL(L);
return L;
}