酸辣小太阳. 2022-09-16 19:38 采纳率: 71.4%
浏览 41

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

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

#include <stdio.h>
#include <stdlib.h> 
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&&j<i)
    {
        s=s->next;
        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 <f>\n");
    printf("delete from List <d>\n");
    printf("clear List <c>\n");
    printf("print List 

\n"); printf("exit system <e>\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; }

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-09-16 19:51
    关注

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

    评论

报告相同问题?

问题事件

  • 创建了问题 9月16日