将不显示多个值
问题描述:
没有错误,但我期待10个值,但我只有一个值。以下是我的创建和显示功能。将不显示多个值
void create()
{
int random;
for (int i = 0; i < 10; i++)
{
struct node *new_node, *current;
new_node = new node;
random = randomNum();
new_node->data = random;
new_node->next = NULL;
if (start == NULL)
{
start = new_node;
current = new_node;
new_node = NULL;
}
else
{
current->next = new_node;
current = new_node;
}
}
}
void display()
{
struct node *new_node;
new_node = start;
while (new_node != NULL)
{
cout << new_node->data << "->";
new_node = new_node->next;
}
}
我需要改变什么?
答
尝试以下行
current = new_node;
current->next = new_node;
因为在你的情况下,有你这样怎么可以更新其下没有current
指针的值。首先更新/设置当前,然后更新/设置下一个。
if (start == NULL)
{
start = new_node;
current = new_node;
current->next = NULL;
new_node = NULL;
}
else
{
current = new_node;
current->next = new_node;
}
+0
现在没有错误,但是我的输出不是正确显示。我需要改变什么? –
答
与编译器消息的问题是,编译器无法确定在else语句中使用的变量current
是否被提前初始化。
如果这是一个警告,你可以忽略它。
或者你可以重写功能通过以下方式
void create()
{
const int N = 10;
node **current = &start;
while (*current) current = &(*current)->next;
for (int i = 0; i < N; i++)
{
*current = new node;
(*current)->data = randomNum();
(*current)->next = nullptr;
current = &(*current)->next;
}
}
的for循环也可以这样写的身体(我假设数据成员data
先于节点定义数据成员next
。否则交换初始化。
*current = new node { randomNum(), nullptr };
current = &(*current)->next;
如果开始不为空,哪里目前得到初始化? – Steve
_I试图初始化'电流 - >未来= NULL'_你阅读警告消息?它在抱怨'真正水流nt'(未初始化),而不是'current-> next'。这种警告的原因是:如果if(start == NULL)中的条件为false,则执行'else'块,并且'current-> next = new_node;'由于未初始化指针的解引用而为UB (你试图修复'current-> next = NULL'是UB出于同样的原因)。 –
@When Hang Khoo这是一个确实的错误还是一个警告?如果这是一个警告,你可以忽略它。 –