Проблема с выводом двусвязного списка

Рейтинг: 2Ответов: 0Опубликовано: 19.02.2023

Есть двусвязный список, нужно написать функцию, которая бы позволяла постраничный показ элементов листа (например по два элемента). Написал функцию:

   void ShowList(hwnd* hwnd){
    int x = 0, y = 0, id = 0;
    node* temp;
    node* head = (node*)malloc(sizeof(node));
    head = hwnd->head;
    char c;
    do
    {
        system("cls");
        puts      (" ID      NAME          SEX        SPORT          BORN    GROWTH ");
        for(int i = 0; i < 2 ; i++){
                printf(" %-2.2d   %-12.12s    %-6.6s   %-16.16s  %-4.4d      %-3.3d  \n", id, head->data->name, head->data->sex, head->data->sport, head->data->born, head->data->growth);
                //проверка, чтобы не выйти за границы
                if(!head->next)
                    break;
                head = head->next;
            }

        //вывели два элемента, теперь ожидаем ответа от пользователя
        while(1){
            c = getch();
            //1 - листаем далее, при этом делая доп проверку, чтобы не выйти за границы списка
            if (c == 0x31 && (head != hwnd->head->next->next)){
                head = head->prev->prev->prev->prev;
                break;
            }
            else if(c == 0x32 || c == 27)
                break;
        }
    }
    while(c != 27);
    head = NULL;
    free(head);
}

Функция работает, вывод не крашится, однако есть проблема. Когда в листе не четное число элементов, например 11, то при перелистывании назад выведется 7 и 8 элемент, а не 9 и 10. Если делать до проверку на конец:

if (c == 0x31 && (head == hwnd->tail)){
            head = head->prev->prev;
            break;
        }

тогда вывод зациклится в конце... как выйти из ситуации? =( https://pastebin.com/jty13bLh

Ответы

Ответов пока нет.