while (p != nullptr) { if (p == nullptr) { break; } cout << "新闻标题:" << p->data.name << "新闻号:" << p->data.num << " 新闻内容:" << p->data.n << endl; p = p->next; }为什么一直都跳不出循环?
时间: 2023-12-12 20:02:36 浏览: 31
在这段代码中,while循环的条件是p不为nullptr,但是在循环内部又有一个if语句判断p是否为nullptr,并且在if语句中使用了break语句。这会导致当p为nullptr时跳出循环,但是在循环内部p已经被移动到了下一个节点,因此在下一个循环中p不为nullptr,循环会继续执行,直到出现nullptr为止。
为了解决这个问题,可以将if语句中的判断条件改为p->next == nullptr,这样当p移动到链表的最后一个节点时,p->next为nullptr,循环会自动跳出。同时可以去掉if语句中的break语句,这样可以保证循环中的所有语句都会被执行。修改后的代码如下:
```
while (p != nullptr) {
cout << "新闻标题:" << p->data.name << "新闻号:" << p->data.num << " 新闻内容:" << p->data.n << endl;
p = p->next;
}
```
相关问题
while (p) { cout << "新闻标题:" << p->data.name << "新闻号:" << p->data.num << " 新闻内容:" << p->data.n << endl; p = p->next; if (p == nullptr) { break; } }
这段代码与之前的代码逻辑相同,只是在循环体内部将 if 判断语句移到了循环体的末尾,也就是说在循环体的最后判断 p 是否为 nullptr,如果是则跳出循环。这样做是可以避免在循环体内部重复判断 p 是否为 nullptr,从而简化代码。但是需要注意的是,由于循环条件已经限制了 p 不为 nullptr,因此在循环体内部其实不需要再次判断 p 是否为 nullptr,直接执行 p = p->next; 就可以了。所以,这段代码可以简化为以下形式:
```
while (p != nullptr) {
cout << "新闻标题:" << p->data.name << "新闻号:" << p->data.num << " 新闻内容:" << p->data.n << endl;
p = p->next;
}
```
这样既简洁又不会影响代码的功能。
string id; cout << "请输入工号:"; cin >> id; while (p != nullptr) { if (p->data.getId() == id) { p->data.printInfo(); } p = p->next; } break;修改代码,使其在没有找到可以匹配的信息时,输出"没有找到相关教职工信息"。
可以在循环结束后加一个判断,如果没有找到匹配的信息,则输出相应的提示信息。修改后的代码如下:
```
string id;
cout << "请输入工号:";
cin >> id;
bool found = false; // 标记是否找到匹配的信息
while (p != nullptr)
{
if (p->data.getId() == id)
{
p->data.printInfo();
found = true;
break; // 找到匹配的信息后可以直接退出循环
}
p = p->next;
}
if (!found) {
cout << "没有找到相关教职工信息" << endl;
}
```
这样,如果循环结束后 still 没有找到匹配的信息,就会输出 "没有找到相关教职工信息"。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.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)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)