I make code to display multiple pages (max. 5 lines/page) with persons from one list:
/* PRE: page : number of the page we want to show, starting with 1
* RETURNS: pagenumber of the page showing if there is one, 0 otherwise */
const int buf_length = 255;
const int max_num_lines = 15;
const int num_person_per_page = max_num_lines / 3;
const int num_person = person_get_num_person(personmgr);
char buf[buf_length+1];
int i, count, cur = 0;
/* List Header */
snprintf(buf, buf_length, "List of person on page (%d/%d)):", page, num_person/num_person_per_page);
list_set_text( list, cur++, buf);
list_set_hilight(list, -1);
If list have number of persons witch isn’t multiples of 5 (72 – in my example), list header of last page returns total number of page as 14 instead of 15 (14/15).
First page list header:
List of person on page: 1/14:
01. AAA
02. BBB
03. CCC
04. DDD
05. EEE
Second page list header:
List of person on page: 2/14:
06. FFF
07. GGG
08. HHH
........................
Last page list header:
List of person on page: 14/15:
71. XXX
72. ZZZ
I want a to round up to next integer number (pages number to be displayed correctly).
72 / 5 = 14.4 => 15
70 / 5 = 14 => 14
36 / 5 = 7.2 => 8
First page list header:
List of person on page: 1/15:
01. AAA
02. BBB
03. CCC
04. DDD
05. EEE
Second page list header:
List of person on page: 2/15:
06. FFF
07. GGG
08. HHH
........................
Last page list header:
List of person on page: 15/15:
71. XXX
72. ZZZ
You can write
(n + 4) / 5to integrally compute the mathematical ceiling of n / 5: Ifnis already a multiple of 5 then you’re adding4 / 5 == 0, and otherwise you’re adding1.