void showNode(Link head) { //查看新闻 Link p = head->next; int choicecc; while (p != nullptr) { cout << "新闻标题:" << p->data.name << "新闻号:" << p->data.num << " 新闻内容:" << p->data.n << endl; p = p->next; } printf("这是所有的新闻了,输入1返回"); while (1) { scanf("%d", &choicecc); if (choicecc == 1) { admin4(); break; } else { printf("重新输入:"); } } }这一段代码,在输出完全部有数据的节点后,会卡在一个空的“新闻标题”中,之后程序没有反应
时间: 2024-01-31 11:03:48 浏览: 51
根据你提供的代码,我发现问题可能出在Link的定义上。请确保Link的定义包含以下内容:
```
struct node {
News data;
node* next;
};
typedef node* Link;
```
其中,News是你自己定义的新闻结构体,包含新闻标题、编号和内容。如果Link的定义与上述代码不同,可能会导致程序出现问题。
如果Link的定义正确,那么问题可能出在链表数据的输入上。请检查你的代码是否正确地向链表中插入了数据,并且每个节点的next指针是否正确地指向了下一个节点。如果数据插入不正确,或者链表的next指针没有正确地设置,可能会导致程序出现问题。
如果以上两个方面都没有问题,那么你可以尝试在打印“新闻标题”之前,先检查p指针是否为空,如果为空则跳出循环。修改后的代码如下:
```
void showNode(Link head) {
//查看新闻
Link p = head->next;
int choicecc;
while (p != nullptr)
{
if (p == nullptr) {
break;
}
cout << "新闻标题:" << p->data.name << "新闻号:" << p->data.num << " 新闻内容:" << p->data.n << endl;
p = p->next;
}
printf("这是所有的新闻了,输入1返回");
while (1) {
scanf("%d", &choicecc);
if (choicecc == 1) {
admin4();
break;
}
else {
printf("重新输入:");
}
}
}
```
这样修改后,程序会在检查到p指针为空时跳出循环,避免了程序卡住的问题。
阅读全文