想问一下,为什么我明明用了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;
}