求大神带躺 。case 3:一直循环永不会停?
#include<stdio.h>#include<stdlib.h>
#include<string.h>
typedef struct{
char no[8]; //8位学号
char name[20]; //姓名
int price; //成绩
}Student;
typedef struct LNode{
Student data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
//LinkList le;
LNode *le1=NULL,*le2=NULL,aaa,*le=&aaa,*le3=&aaa;
int main(){
static int x;
int a,i;
printf("\n********************************\n\n");
puts("1. 构造链表表");
puts("2. 录入学生信息");
puts("3. 显示学生信息");
puts("4. 输入姓名,查找该学生");
puts("5. 显示某位置该学生信息");
puts("6. 在指定位置插入学生信息");
puts("7. 在指定位置删除学生信息");
puts("8. 统计学生个数");
puts("0. 退出");
printf("\n********************************\n\n");
while(1){
printf("请输入选择:");
scanf("%d",&a);
switch(a){
case 1:{
printf("请输入学生个数:");
scanf("%d",&x);
le1=(LNode *)malloc(sizeof(LNode));
le2=le1;//保存第一个节点地址。
for(i=0;i<x;i++){
if(le1!=NULL){
le3->next=le1;//间接访问时指针不能为0;
le3=le1;
}
else {printf("创建链表失败!");
break;
}
le1=(LNode *)malloc(sizeof(LNode));
}
free(le1);//释放无用的地址
(*le3).next=NULL;//最后节点next内容为空。le3为最后的节点指针;
le->next=le2;//le为第一个结点。//保持le指向第一个节点,
break;
}
case 2:{
for(i=0;le->next!=NULL;i++){
le1=le->next;
le=le1;
printf("请输入第%d个学生姓名:",i+1);
scanf("%s",le1->data.name);
printf("请输入第%d个学生学号:",i+1);
scanf("%s",le1->data.no);
printf("请输入第%d个学生成绩:",i+1);
scanf("%d",&(le1->data.price));
}
printf("输入信息完毕!\n");//保持le指向第一个节点,
le->next=le2;
break;
}
case 3:{
le=le2;
for(i=0;le!=NULL;i++){
printf("第%d个学生姓名:%s,学号:%s,成绩:%d\n",(i+1),le->data.name,le->data.no,le->data.price);
le=le->next;
}
le->next=le2;//保持le指向第一个节点,
break;
}
case 4:{
char b[10];//数组直接初始化时,跟个定义时初始化可以省略大小,但不是定义时初始化不建议省略大小。
int flag=1;
printf("请输入查找学生的姓名:");
scanf("%s",b);
for(i=0;i<x;i++){
if(strcmp(b,le->next->data.name));{
printf("第%d个学生姓名:%s,学号:%s,成绩:%d\n",(i+1),le->data.name,le->data.no,le->data.price);
flag=1;
break;
}
le1=le->next;
le=le1;
}
if(flag)
printf("查找成功了\n");
else
printf("查找失败了\n");
le->next=le2;//保持le指向第一个节点,
break;
}
}
}
}在使用case 3:一直输出停都停不下来?case 4:无论输入什么都有结果?