我正在尝试打印多链表的索引。每个节点都有两个元素 - 仓库编号和工具编号。我正在打印每个仓库中的所有工具。我在列表中正确迭代时遇到问题。
我没有得到正确的值,并且无法在我的方法中找到问题。
struct Node
{
int WarehouseNumber;
int ToolNumber;
struct Node *n;
}
void showWarehouses()
{
int tempvalue;
bool flag = false;
struct Node *s;
s = start;
if (start == NULL)
{
cout<<"Unable";
return;
}
s->WarehouseN = tempvalue;
cout<<"Warehouse "<<tempvalue<< ": Tool ";
while(s != NULL)
{
if (s->WarehouseN == tempvalue)
{
flag = true;
cout<< s->ToolN <<" ";
s = s->next;
}
}
}
答案 0 :(得分:1)
您尚未为tempvalue
分配任何值,因此会导致未定义的行为。阅读this post.
同样基于struct Node
中的内容以及您的代码,我认为您可以在程序中找到类似这样的图片并打印它们。
所以最重要的是我会写这样的代码:
void showWarehouses()
{
int tempvalue=1;
bool flag, cont;
struct Node *s;
if (start == NULL)
{
cout << "Unable";
return;
}
cont = true;
while (cont)
{
cont = false, flag = false;
s = start;
while (s)
{
if (s->WarehouseN == tempvalue){
cont = true;
if (!flag){
cout << "Warehouse " << tempvalue << ": Tool ";
flag = true;
}
cout << s->ToolN << " ";
}
s = s->next;
}
cout << endl;
tempvalue++;
}
}
答案 1 :(得分:0)
我假设 - &gt; warehouseN和 - &gt; toolN相应地获取仓库和工具nums。这是在你的if语句之后。
struct Node *temp;
while (s != NULL){
temp = s;
cout << "Warehouse " << s->warehouseN << ": Tool ";
while (s!= NULL) {
cout << s->toolN << " ";
s = s-> next;
}
s = temp->next;
cout << endl;
}
另外,您应该在之前启动 将其设置为开始
答案 2 :(得分:0)
如果:
s = start;
struct Node *s;
编译,你有一个更宽范围的s
,它被设置为在被另一个名为showWarehouses
的变量隐藏在s
内之前开始。那将是一件坏事。
无论如何,直接结果是showWarehouses
s
永远不会被初始化,而且程序不会崩溃可能会让人感到愚蠢。由于s
未初始化,程序的其余部分正在打印垃圾,因此预期输出错误。