while (1)
{
c = getchar();
switch(state)
{
case 0:
if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == Bit_SET))
{
state=1;
}
if ( c=='p')
{
state = 2;
}
break;
case 1 :
if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) != Bit_SET))
{
state = 0;
}
break;
case 2:
iprintf("%s",led_name_arr[i]);
if (c=='r')
{
state=0;
}
break;
}
}
我想要打印printf,然后达到state2 ..如何实现这一目标。下面是我试过的以及我被卡住的地方。
伪码:
if ( c==P)
{
printf(" hi");
state 2;
}
**在这种情况下,printf语句不会被执行** 或
case 2:
iprintf("%s",led_name_arr[i]);
if (c=='r')
{
state=0;
}
break;
**在这种情况下,printf语句继续打印循环**
我不希望while循环停止,在一个连续的循环中我希望case 0继续工作,但是当它得到输入p ..它暂停并执行printf ...并等待直到它得到ar来恢复大小写0 ....因此,程序永远不会停止,但等待获得“P”或“R”来执行每个案例...我希望我有意义
任何帮助将不胜感激。
答案 0 :(得分:3)
您的break
已脱离switch ... case
而非while
。你需要使用某种布尔标志来打破外部循环,例如:
bool someflag = true;
while(someflag){
switch(something){
case a:
someflag = false; // set the flag so we break out of the loop
break; // break out of the switch-case so we don't enter case b
case b:
// do something else
break;
}
}
-------- EDIT, because I misunderstood the question ------------
我认为你的逻辑中需要一个额外的状态,现在(忽略状态1),你有两种状态:
等一个p
,当你拿到一个时,转到2。
printf
,直到获得r
,然后转到1
你想要的是:
等一个p
,当你拿到一个时,转到2。
执行printf
,然后转到3。
等一个r
,当你拿到一个时,转到1。
答案 1 :(得分:1)
您已经使用while(1)语句创建了一个无限循环,该语句没有可能的退出。 switch中的break语句适用于switch语句,不是 while循环。你需要在交换机外面另一个break语句。
答案 2 :(得分:1)
我不确定你在问什么,但我很确定你想要的情况2是这样的:
case 2:
iprintf("%s",led_name_arr[i]);
while(c!='r')
{
c = getchar();
}
state=0;
break;
答案 3 :(得分:0)
阱, 将状态初始化为0
编译并运行程序
首次输入p // here = 2
然后在这里输入r // state = 0
....由于while(1)
而继续循环答案 4 :(得分:0)
因为你没有打破while(1)循环。再使用一次中断for while循环。