2017-10-16 66 views
-2

没有错误,但我期待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; 
} 
} 

我需要改变什么?

+2

如果开始不为空,哪里目前得到初始化? – Steve

+1

_I试图初始化'电流 - >未来= NULL'_你阅读警告消息?它在抱怨'真正水流nt'(未初始化),而不是'current-> next'。这种警告的原因是:如果if(start == NULL)中的条件为false,则执行'else'块,并且'current-> next = new_node;'由于未初始化指针的解引用而为UB (你试图修复'current-> next = NULL'是UB出于同样的原因)。 –

+0

@When Hang Khoo这是一个确实的错误还是一个警告?如果这是一个警告,你可以忽略它。 –

回答

0

尝试以下行

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

现在没有错误,但是我的输出不是正确显示。我需要改变什么? –

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;