/* Description: * Displays menu and waits for user input. Scroll with # and *, with wrap-around. * Parameters: * items - menu items * items_sz - menu items array's size * upper - maximum valid input choice (careful: 0 < 1, don't use for 10!) * Return value: * char - user's choice as an integer (0..9) */ char rollmenu(const char **items, char items_sz, char upper) { char i = 0; char resp; for (;;) { puts(items[i]); resp = getchar(); switch (resp) { case '*': // previous page i = (i + items_sz - 1) % items_sz; break; case '#': // next page i = (i + items_sz + 1) % items_sz; break; default: resp -= '0'; if (resp <= upper) { return resp; } break; } } }