gpt4 book ai didi

多条件循环的c编程

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:01 25 4
gpt4 key购买 nike

我在有限状态机中有一个 foor 循环:

if (nextstate != state)
{
state = nextstate;
for (i=0; menu_state[i].state; i++)
{
if (menu_state[i].state == state)
{
statetext = menu_state[i].pText;
pStateFunc = menu_state[i].pFunc;
break;
}
}

}

状态机用于在 LCD 显示器上显示菜单。 (我使用了一个我在网上找到的状态机示例,并将其改编为我的微 Controller 系统)。

Everyting 工作正常,菜单系统工作,但我现在想在菜单中添加相邻的文本行(以便更容易看到您在菜单中的位置)。(原来的菜单是 1 行显示,我有 5 行显示)。

所以我的结论是我需要调整这个 for 循环。

这是我想出的:

if (nextstate != state)
{
state = nextstate;

for (i=0,a=1,b=2,c=3,d=4; menu_statetop[i].state; i++,a++,b++,c++,d++)
{

if (menu_statetop[i].state == state)
{
statetext= menu_statetop[i].pText;
statetext2= menu_statetop[a].pText;
statetext3= menu_statetop[b].pText;
statetext4= menu_statetop[c].pText;
statetext5= menu_statetop[d].pText;

pStateFunc = menu_statetop[i].pFunc;
break;
}
}

}

这似乎或多或少地起作用......但问题是边界。因为在查找表中有 5 行。当变量变得大于这个 MAX (4) 值时,它们超出了有效的可查找 MAX 值并显示垃圾。

我正试图为此找到一个优雅的解决方案。有任何想法吗?我考虑过使用 if 语句,但看起来都很……凌乱……大而笨拙的代码...

所以我想要实现的是,例如,当“a”变为 4 时,它应该变为 0。下次 for 循环运行时,它应该变为 1。b、c和d也一样。并且它们之间应该保持相同的“距离”(当 b 是 2 c 应该是 3,d 应该是 4 等等)

相同的想法,但与 MIN(0) 值相反。

有人知道如何以好的方式做这样的事情吗?

最佳答案

你可以做的不是乱七八糟的 int a

menu_statetop[(i + 1) % 5].pText;
menu_statetop[(i + 2) % 5].pText;
menu_statetop[(i + 3) % 5].pText;

等等。

编辑:这也通过确保它“回绕”回到开始来处理菜单溢出。除了使用 i + 1 等访问下一个菜单项外,它还使用模数(或余数)运算符 % 来实现此目的。

关于多条件循环的c编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54222945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com