Helloooo!
Я написал симларский вопрос, но я изменил, как работает программа, и теперь я снова столкнулся с проблемой (я сделал одну большую ошибку и одну большую справочную таблицу вместо многих, чтобы сделать код чище) , но теперь это больше не работает ..
Я новичок в программировании, поэтому, вероятно, простая ошибка .. (например, я сделал что-то не так, например =)
ниже мой код. это для ЖК-меню.
активная строка меню в коде работает правильно. но пассивные строки меню (чтобы указать, где в меню вы находитесь) не работает. Я просто получаю строки в меню, которые не хочу отображать.
количество строк в разных подменю определяется как "int rowcount;" и заявления случая (и это, кажется, работает хорошо).
но я получаю неправильный текст в меню.
Я верю, что именно здесь я ошибаюсь (???):
statetext2 = menu_state [(i + 1)% 2] .pText;
это работало, когда у меня было несколько циклов foor и несколько справочных таблиц, но, похоже, сейчас это не работает.
как мне сделать, чтобы эта работа?
есть идеи?
key = getkey(); // Read buttons
memorykey = key;
if (pStateFunc)
{
// When in this state, we must call the state function
nextstate = (*pStateFunc) (key);
}
else if (key != KEY_NULL)
{
// Plain menu, clock the state machine
nextstate = StateMachine(state, key);
}
if (nextstate != state)
{
state = nextstate;
for (i=0; menu_state[i].state; i++)
{
if (menu_state[i].state == state)
{
switch(menu_state[i].rowcount)
{
case 0://What case are picked depends on how many lines on the display that
menu needs
statetext1= menu_state[i].pText;//"active menu line"
statetext2= menu_state[(i + 1) % 2].pText;//"passive" menu lines
statetext3= emptyline; //do not print any text to statetext3
statetext4= emptyline; //do not print any text to statetext4
statetext5= emptyline; //do not print any text to statetext5
statetext6= emptyline; //do not print any text to statetext6
break;
case 1://depends on how many lines on the display that menu needs
statetext1= menu_state[i].pText;//"active menu line"
statetext2= menu_state[(i + 1) % 3].pText;//"passive" menu lines
statetext3= menu_state[(i + 2) % 3].pText;//"passive" menu lines
statetext4= emptyline;
statetext5= emptyline;
statetext6= emptyline;
break;
case 2://depends on how many lines on the display that menu needs
statetext1= menu_state[i].pText;
statetext2= menu_state[(i + 1) % 4].pText;
statetext3= menu_state[(i + 2) % 4].pText;
statetext4= menu_state[(i + 3) % 4].pText;
statetext5= emptyline;
statetext6= emptyline;
break;
case 3://depends on how many lines on the display that menu needs
statetext1= menu_state[i].pText;
statetext2= menu_state[(i + 1) % 5].pText;
statetext3= menu_state[(i + 2) % 5].pText;
statetext4= menu_state[(i + 3) % 5].pText;
statetext5= menu_state[(i + 4) % 5].pText;
statetext6= emptyline;
break;
case 4://depends on how many lines on the display that menu needs
statetext1= menu_state[i].pText;
statetext2= menu_state[(i + 1) % 6].pText;
statetext3= menu_state[(i + 2) % 6].pText;
statetext4= menu_state[(i + 3) % 6].pText;
statetext5= menu_state[(i + 4) % 6].pText;
statetext6= menu_state[(i + 5) % 6].pText;
break;
}
pStateFunc = menu_state[i].pFunc;
break;
}
}
}
}
}
из h-файла:
typedef const struct
{
unsigned char state;
unsigned char key; //input called before
unsigned char nextstate;
} MENU_NEXTSTATE;
typedef const struct
{
unsigned char state;
char const *pText;
char (*pFunc)(char key); //char input called before
int rowcount;
} MENU_STATE;
const MENU_STATE menu_state[] = {
// STATE STATE TEXT STATE_FUNC (INDICATES WHAT SWITCH CASE TO USE
IN THE "if (nextstate != state)" foor loop)
{ST_A0, SETTINGS, NULL, 0},
{ST_A1, MAINTENANCE, NULL, 0},
{ST_B0, FANDEL, NULL, 4},
{ST_B1, AUTOMATIC, NULL, 4},
{ST_B2, TIMERCLEANTIME, NULL, 4},
{ST_B3, AMFANS, NULL, 4},
{ST_B4, AMFANSWELD, NULL, 4},
{ST_B5, LANGUAGESET, NULL, 4},
{ST_C0, HEPAUP, NULL, 3},
{ST_C1, RESETHEPA, NULL, 3},