C语言数据结构链表问题——管理学生信息

想问一下,为什么我明明用了while(1),但是编译出来只能循环一次?

#include 
#include  
typedef struct{
    int sno;
    int G;
}Student;
typedef struct LNode{
    Student stu;
    struct LNode*next;
} LNode,*LinkList;
void save(LinkList&L)//保存文件 
{
    FILE*f;
    if ((f = fopen("file", "w+")) == NULL){  
        printf("不能打开文件\n");
        exit(1);
    }
    LinkList p;
    p=new LNode;
    p=L->next;
    while(p)
    {
        fprintf(f,"%d",p->stu.G);
        fprintf(f,"%d",p->stu.sno);
        p=p->next;
     } 
     fclose(f);
}
void insert(LinkList&L,int i)//插入 
{
    printf("请输入学生信息:\n");
    LNode*p,*s;
    p=new LNode;
    s=new LNode;
    s=L->next;
    scanf("%d %d",&p->stu.sno,&p->stu.G);
    int j=1;
    while(s&&jnext;
        j++;
    }
    p->next=s->next;
    s->next=p;
}
void find(LinkList&L)//查找
{
    printf("请输入要查找的学生的学号:\n");
    int num;
    scanf("%d",&num);
    LinkList p;
    p=new LNode;
    p=L->next;
    while(p->stu.sno!=num)
    {
        p=p->next;
    }
    printf("该学生成绩为:%d",p->stu.G);
 } 
void del(LinkList&L)//删除 
{
    printf("请输入要删除信息的学生的学号:\n");
    int num;
    scanf("%d",&num);
    LinkList p,q;
    p=new LNode;
    q=new LNode;
    p=L->next;
    while(p->stu.sno!=num)
    {
        p=p->next;
    }
    q=p->next;
    p->next=q;
    delete q;
}
void clear(LinkList&L)//清空 
{
    LinkList p,q;
    p=new LNode;
    q=new LNode;
    p=L->next;
    while(p)
    {
        q=p->next;
        delete p;
        p=q;
    }
    L->next=NULL;
}
void print(LinkList&L)//读取所有学生信息 
{
    LinkList p;
    p=new LNode;
    p=L->next;
    while(p)
    {
        printf("学号:%d ,成绩:%d",p->stu.sno,p->stu.G);
        p=p->next;
    }
}
void menu(){
    printf("save to file \n");
    printf("insert into List \n");
    printf("find from List \n");
    printf("delete from List \n");
    printf("clear List \n");
    printf("print List 

\n"); printf("exit system \n"); } int main(int argc, char *argv[]) { char choice; LinkList L; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; system("color 07"); while(1) { menu(); scanf("%c",&choice); switch(choice) { case 's' :save(L);break; case 'i' :{ int i; printf("请输入要插入的位置:\n"); scanf("%d",&i); insert(L,i); break; } case 'f' :find(L);break; case 'd' :del(L);break; case 'c' :clear(L);break; case 'p' :print(L);break; case 'e' :exit(0); default :printf("error choice\n"); break; } } return 0; }

运行一次你输入的是什麽字符呢?