А их не надо менять случайным образом. Доступность пункта меню должна проверяться в момент его отображения, если уж на то пошло.
Но вы, похоже, не поняли смысла. Каждый пункт меню здесь - отдельный объект, описанный структурой MenuItem. В этой структуре можно хранить не только признак активности и строку, но и черта лысого: идентификаторы, ссылку на родительский пункт меню, ссылку на дочернее меню и т.д., и т.п. Все в одном месте. И работать с ним соответственно
Согласен. Я в курсе и про списки, коллекции, листы, деревья, итэмы и т.д… Но в данном слу, ае у меня задача гораздо проще именно так как я её и описал в самом начале… Возможно кто-то меня понял несовсем верно, но самое главное намекнули на решение… Спасибо
Запомните, первое (от слова совсем первое), что должно делаться в рекурсивной функции – проверка параметра, зависящего от глубины.
Вы же её вляпали в 24-ую строку. Ну, хорошо, к Вам изначально обратились с параметром, который больше-равен maxItem (а это делается в строке №11 когда текущий currentIndex равен 4). И? Вы в строке №21 полезли проверять menuItemStat[5], т.е. вылезли за границу массива, там оказался “не ноль” и … Вы вернули пятёрку. Дальше также вернули шестёрку. А потом (в menuItemStat[7]) оказалась false и всё восстановилось.
Если бы Ваша рекурсивная функция начиналась бы так:
uint8_t getNextIndex(uint8_t currInd) {
if (currInd >= maxItem) currInd = 0;
// дальше сами пишите
эта проблема никогда не возникла бы.
Запомните, проверка - первое, всё остальное - потом.
Без рекурсий и с учетом динамичного (в fillArr закомментировать <вообще удалить, они для теста, как собсно и рандомные, тут потом будет "реальное "заполнение> статичные присваивание и раскомментировать рандомные) изменения состояний и проверкой их перед вычислением следующего индекса… Так же все пункты могут быть выключены…
В fillArr я буду предварительно собирать массив состояний на данный момент времени “пунктов”
Как то так… С дороги может где и накосячил, проснулся, написал и сразу сюда… может на попкорн еще успею
ЗЫЖ Возможно ITEM_COUNT не обязательно передавать в функции а работать с ним напрямую…
Ай Ай Ай…))) Не хорошо…
Я критику уважаю, …но когда говорят, что я дурак, только потому что сделал лучше(надеюсь на это ) и умывают руки… Не понимаю (
Ну и да ладно…
Как по мне здесь косяк ИМХО.
В функцию передаём параметром массив без размера.
Уже внутри функции выходим за границы, а там, как повезёт.
Это если я правильно понял недавно обсуждавшуюся тему
Массивы так и передаются… Указателями…
А что бы не выходить за границы туда же (в функции) передаются и их размеры… Хотя в моем случае можно и не передавать, а использовать напрямую константу ИТЕМ_КОУНТ
Что такое массив? Это область памяти из эн байтов идущих подряд. Размерность указывается в объявлении массива. И умножает я на размер элемента массива… В байтах.
Что такое имя массива? Это указатель на первую ячкйку(байт) массива…
Так как я передаю в функцию указатель на массив с известной длинной, то я не выхожу за границы