Проблема с выводом двусвязного списка
Есть двусвязный список, нужно написать функцию, которая бы позволяла постраничный показ элементов листа (например по два элемента). Написал функцию:
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
Источник: Stack Overflow на русском