case 1: system("cls"); printf("请输入更改后的学生学号:\n"); int d; scanf("%d",&d); while(p1!=NULL) { if(d==p1->id) { printf("学号重复!请重新输入!\n"); scanf("%d",&d); p1=head; break; } else p1=p1->next; } p->id=d; printf("修改完成!\n"); break;这段代码哪里错了
时间: 2023-12-20 15:07:03 浏览: 29
这段代码有两个问题:
1. 在进入while循环之前,应该先将p1指针重新指向头结点,否则会出现p1指针已经指向了链表的末尾,无法再进行遍历的情况。
2. 在while循环中,如果输入的学号与链表中已有的学号重复,应该输出提示信息并重新输入,而不是直接将p1指针指向头结点,因为这样会导致p1指针丢失链表的遍历位置。
修改后的代码如下所示:
```
system("cls");
printf("请输入更改后的学生学号:\n");
int d;
scanf("%d",&d);
p1 = head; // 将p1指针重新指向头结点
while(p1 != NULL) {
if(d == p1->id) {
printf("学号重复!请重新输入!\n");
scanf("%d",&d);
p1 = head; // 如果学号重复,重新从头开始遍历链表
} else {
p1 = p1->next;
}
}
p->id = d;
printf("修改完成!\n");
break;
```
相关问题
case 1: system("cls"); printf("请输入更改后的学生学号:\n"); scanf("%d",&p->id); while(p1!=NULL) { if(p->id==p1->id) { printf("学号重复!请重新输入!\n"); scanf("%d",&p->id); p1=head; continue; } p1=p1->next; } printf("修改完成!\n"); break;这段代码会进入一个循环,我该怎么修改
可以在循环中加入一个标志变量,当发现学号重复时将其设为1,退出循环后再根据标志变量的值输出对应的信息。修改后的代码如下:
```
system("cls");
printf("请输入更改后的学生学号:\n");
scanf("%d",&p->id);
int flag = 0; // 标志变量,初始化为0
while(p1 != NULL) {
if(p->id == p1->id) {
printf("学号重复!请重新输入!\n");
scanf("%d",&p->id);
p1 = head;
flag = 1; // 发现重复,将标志变量设为1
break;
}
p1 = p1->next;
}
if(flag == 0) { // 如果没有发现重复,输出修改完成
printf("修改完成!\n");
}
break;
```
case 1: system("cls"); printf("请输入更改后的学生学号:\n"); int d;//d用于判断是否与链表原有的学号重复 scanf("%d",&d); while(p1!=NULL) { if(d==p1->id) { printf("学号重复!请重新输入!\n"); scanf("%d",&d); p1=head; break; } else p1=p1->next; } p->id=d; //当d与原有的学号不同时才赋值 printf("修改完成!\n"); break;这段代码有时会进入循环,我该怎么修改
这段代码中,当输入的学号与链表中已有的学号重复时,会进入无限循环,因为在循环中没有重新将p1指向链表头部。可以尝试在循环体内加上一行 `p1=head;`,使得每次循环都从链表头部开始遍历,如下所示:
```
while(p1!=NULL)
{
if(d==p1->id)
{
printf("学号重复!请重新输入!\n");
scanf("%d",&d);
p1=head; // 重置p1指针到链表头部
break;
}
else p1=p1->next;
}
```
这样,当输入的学号与链表中已有的学号重复时,程序会重新从链表头部开始遍历,而不会陷入无限循环。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)