Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尝试删除链接列表的第一个节点时的奇怪行为_C_Linked List - Fatal编程技术网

C 尝试删除链接列表的第一个节点时的奇怪行为

C 尝试删除链接列表的第一个节点时的奇怪行为,c,linked-list,C,Linked List,我正在编写一个delete函数,通过搜索教室、名字、姓氏等参数来删除等待列表中的条目。该函数适用于位于链表中部或尾部周围的任何条目。但是,如果搜索的条目是第一个节点,则在输出中会收到奇怪的字符,如果在此之后尝试退出程序,则会发生崩溃 struct request* delete_from_list(struct request *list){ if(list == NULL) { printf("The list is empty so delete can n

我正在编写一个delete函数,通过搜索教室、名字、姓氏等参数来删除等待列表中的条目。该函数适用于位于链表中部或尾部周围的任何条目。但是,如果搜索的条目是第一个节点,则在输出中会收到奇怪的字符,如果在此之后尝试退出程序,则会发生崩溃

struct request* delete_from_list(struct request *list){

    if(list == NULL)
    {
        printf("The list is empty so delete can not be performed");
    }

    struct request *ptr = list;
    struct request *ptr1 = NULL;
    char classroom[ROOM_LEN];
    char first[NAME_LEN+1];
    char last[NAME_LEN+1];

    printf("Enter the class room: \n");
    read_line(classroom, ROOM_LEN);
    printf("Enter the child's first name: \n");
    read_line(first, NAME_LEN);
    printf("Enter the child's last name: \n");
    read_line(last, NAME_LEN);

    //Check for the entry in the list
    while(ptr != NULL)
    {
        if(strcmp(ptr->classroom, classroom) == 0)
            if(strcmp(ptr->first, first) == 0)
                if(strcmp(ptr->last, last) == 0)
                    break;

        ptr1 = ptr;
        ptr = ptr->next;
    }

    if(ptr != NULL)
    {
        if(ptr == list)
            list = list->next;
        else
            ptr1->next = ptr->next;

        free(ptr);

        printf("\n%s %s is deleted from the waiting list for %s classroom", first, last, classroom);
    }

    else if(ptr == NULL)
    {
        printf("%s %s is not found in the waiting list for %s classroom", first, last, classroom);
    }

    return list;
}

案例“d”:从列表(等待列表)中删除列表;用户被要求输入一个操作码,然后它进入了一个开关。它成功了,谢谢您的帮助。@user3121023将其作为答案写下来。