双链表上的FOR循环不返回最后一个元素。反向给出分段错误

用户名

这是列表的声明:

 typedef struct list
 {  char let;
    struct list *next;
    struct list *prev;
 }list;
 list *start=NULL, *stop=NULL;

让测试词成为 Example

用于创建列表的函数按预期方式工作。我试图printf的stop->letstop->prev->next->let以及做start->next...->next->let一路到最后一个只是为了检查每个环节工作。我收到最后一封信e

但是,以下for循环在显示最后一个字母之前就结束了。(输出为Exampl):

for(current=start;current->next!=NULL;current=current->next)
                  printf("%c",current->let);

另外,尝试从右到左显示单词会在显示任何内容之前出现分段错误:

for(current=stop;current->prev!=NULL;current=current->prev)
                  printf("%c",current->let);

根据要求,这里是创建列表的功能。输入是一个字符串。计算后strlen,函数将为每个字母创建一个新节点。

void create(list *first)

{   list* new_node, *current;
    char word[50];

printf("Please input the word: "); //read the input
scanf("%[^\n]s",&word);
for(int i=0;i<=strlen(word)-1;i++) 
{   new_node=malloc(sizeof(list));
    new_node->let=word[i];
    if(first==NULL)
    {

        start=first=current=new_node;
        current=new_node;
        new_node->prev=NULL;
    }
    else
        if(i==strlen(word)-1)
        {
            current->next=new_node;
            new_node->prev=current;
            new_node->next=NULL;
            stop=current=new_node;


        }
        else
        {
            current->next=new_node;
            new_node->prev=current;
            current=new_node;
        }

}

笔记:

1.start->prev以及stop->nextNULL创建列表之后。

2.完全相同的for循环非常适合单链表。

3.list *current是显示功能的局部变量。

阿什什(Ashish)

改变

for(current=start;current->next!=NULL;current=current->next)
              printf("%c",current->let);

for(current=start;current!=NULL;current=current->next)
              printf("%c",current->let);

也改变

for(current=stop;current->prev!=NULL;current=current->prev)
              printf("%c",current->let);

for(current=stop;current!=NULL;current=current->prev)
              printf("%c",current->let);

current->next!=NULLcurrent->prev!=NULL将为假,并且循环甚至不会执行一次。因此,由于for循环永远不会执行,因此不会打印任何内容。

为了更清楚地了解for循环的工作原理,请参见以下流程图:

在此处输入图片说明

您也可以查看教程中的for循环。

您还可以查看Wiki文章:For循环

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

双链表的第一个和最后一个元素

TreeSet不添加最后一个元素

在帖子的最后一个Jekyll循环上添加元素

$ {@:-1}为什么不返回$ @的最后一个元素?

带for循环的Javascript数组,仅返回最后一个元素

For循环返回最后一个结果

使... of跳过循环的最后一个元素

insertBefore仅在循环的最后一个元素上附加元素

如何使用for循环返回列表的最后一个元素

JavaScript QuerySelector不返回最后一个孩子

循环链表中的分段错误

C中的双链表,忽略最后一个条目,或者想要一个不存在的条目

如何仅返回数组的最后一个元素而不获取所有元素

为什么弹出堆栈中的最后一个元素会导致C中的分段错误?

重复(自定义)双链表的第一个元素

输入最后一个数组元素时出现分段错误

C#:返回链表的最后一个节点

我在双向链表中查找最后一个元素的代码抛出分段错误

一个基本的示例c链表计数代码总是抛出分段错误

确定最后一个循环,以便不添加逗号

Java双链表上一个

双栈最后一个元素

调用 next() 时,最后一个元素不断重复。不返回 NULL

公式在最后一个数据上返回错误的结果

当我分配一个值时,链表出现分段错误

反向数组循环 - 超过索引 0 时返回到最后一个索引

嵌套循环:最后一个循环总是返回最后一个数组对象

为什么 Python for 循环每次都返回最后一个元素?

如何检查for循环是否在迭代器的最后一个元素上?