在while循环中返回char*
我试图打印一个链表的内容,它是一个字符*但是while循环 你把代码搞乱了: 获取链接列表中下一项的函数:在while循环中返回char*,c,C,我试图打印一个链表的内容,它是一个字符*但是while循环 你把代码搞乱了: 获取链接列表中下一项的函数: char * list_next(list *l) { list *currentPosition = NULL; currentPosition = l->next; //since the first node is a dummy value in the singly linked list while (currentPosition != NUL
char * list_next(list *l)
{
list *currentPosition = NULL;
currentPosition = l->next; //since the first node is a dummy value in the singly linked list
while (currentPosition != NULL)
{
return currentPosition->charValue;
currentPosition = currentPosition->next;
}
return NULL;
}
在我看来:
char * item;
while(item = list_next(list))
printf("%s ",item);
有人能帮帮我吗?我很确定问题出在这段时间内
循环,但我似乎无法修复它交换两行<代码>返回立即退出该功能。应该是
currentPosition = currentPosition->next;
return currentPosition->charValue;
相反
(更不用说其他人指出的许多其他错误了——由于范围混淆,无法实际更新
next
指针,在取消引用之前缺少对NULL
的检查,等等)交换这两行<代码>返回立即退出该功能。应该是
currentPosition = currentPosition->next;
return currentPosition->charValue;
相反
(更不用说其他人指出的许多其他错误——由于范围混淆,无法实际更新
下一个
指针,取消引用前缺少对NULL
的检查,等等)您的程序,即使返回位置已交换,也只会打印“第二个”每次通过时列表中的项-如果存在。您需要使用双指针来更新基值,或者想出更好的方法来迭代列表。即使返回位置已交换,您的程序仍然只会每次通过打印列表中的“第二个”项(如果存在)。您需要使用双指针来更新基值,或者想出更好的方法来迭代列表。将原始列表传递给list_next()。我相信你会永远打印循环中的第二项
我建议您可以简化如下:
char *item;
for (item=list->next; // Skip the first item as you said the first node is dummy.
item != NULL; item=item->next) {
printf("%s ",item->charValue);
}
将原始列表传递给list_next()。我相信你会永远打印循环中的第二项 我建议您可以简化如下:
char *item;
for (item=list->next; // Skip the first item as you said the first node is dummy.
item != NULL; item=item->next) {
printf("%s ",item->charValue);
}
您在评论中提到,您只需要返回链表中的所有值
function iterate(someNode)
if someNode ≠ null
node := someNode
do
do something with node.value [1]
node := node.next
while node ≠ someNode
由此。
现在您可以在代码中的位置[1]简单地
printf()
。但是,似乎必须返回所有值。
因此,您必须创建一个(可能是动态的)数组。您在注释中提到,只需返回链接列表中的所有值即可
function iterate(someNode)
if someNode ≠ null
node := someNode
do
do something with node.value [1]
node := node.next
while node ≠ someNode
由此。
现在您可以在代码中的位置[1]简单地
printf()
。但是,似乎必须返回所有值。
因此,您必须创建一个(可能是动态的)数组。请发布一个演示您的问题的最小程序。如果您在while循环中返回,为什么不使用
if
语句呢?我看到的另一个问题是,你的列表可能以一个伪值开始,但是你在整个列表中迭代你的主单元,因此只有一个伪值。如果l作为NULL传入,会发生什么?坏事。至少声明一下。@ComFreek我不能只使用if语句,因为我有多个具有char值的节点。我的问题基本上是如何在一个方法中返回超过1个字符*。请发布一个演示问题的最小程序。如果在while循环中返回,为什么不使用if
语句?我看到的另一个问题是,你的列表可能以一个伪值开始,但是你在整个列表中迭代你的主单元,因此只有一个伪值。如果l作为NULL传入,会发生什么?坏事。至少声明一下。@ComFreek我不能只使用if语句,因为我有多个具有char值的节点。我的问题基本上是如何在一个方法中返回超过1个字符*。我刚刚在这个问题下写了一条评论,解释了OP在这里产生了一个逻辑错误。@ComFreek Yap。也许我应该指出这一点——然而,这并不能解决问题。列表中的一个值会永远循环下去。我刚刚在这个问题下写了一条评论,解释了OP在这里产生了一个逻辑错误。@ComFreek Yap。也许我应该指出这一点——然而,这并不能解决问题。列表中的一个值会永远循环下去,因为这真的像是一个家庭作业问题,我不愿意在这里输入实际代码来解决它……因此我为OP添加了一些提示;)嗯,请不要添加到我的帖子中。编辑是为了语法和格式,而不是为了添加我甚至不同意的想法…我为我的编辑感到抱歉。你是对的:这个问题不是一个社区维基。因为这感觉像是一个家庭作业问题,我不愿意在这里放实际的代码来解决它……因此我为OP添加了一些提示;)嗯,请不要添加到我的帖子中。编辑是为了语法和格式,而不是为了添加我甚至不同意的想法…我为我的编辑感到抱歉。你说得对:这个问题不是社区wiki。在list_next()方法中执行prinf不是问题问题问题是我需要返回链接列表中的所有char值在list_next()方法中执行prinf不是问题问题问题是我需要返回链接列表中的所有char值