1
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 以恢复 case 0 .. ..因此程序永远不会停止,而是等待“P”或“R”来执行每个案例......我希望我有意义

任何帮助将不胜感激 。

4

5 回答 5

3

break的 s 打破了switch ... casenot the 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),您有两种状态:

  1. 等待 a p,当你得到一个时,转到 2。

  2. printf对于每个字符,直到你得到一个r,然后转到 1

你想要的是:

  1. 等待 a p,当你得到一个时,转到 2。

  2. 执行 a printf,然后转到 3。

  3. 等待一个r,当你得到一个时,转到 1。

于 2013-01-25T01:10:46.937 回答
1

我不确定你在问什么,但我很确定你想要的情况2是这样的:

case 2:
  iprintf("%s",led_name_arr[i]);
  while(c!='r')
  {
      c = getchar();
  }
  state=0;
  break;
于 2013-01-25T03:17:32.713 回答
1

您已经使用无法退出的 while (1) 语句创建了一个无限循环。switch 中的 break 语句适用于 switch 语句,而不是while 循环。您需要在 switch 之外使用另一个 break 语句。

于 2013-01-25T01:11:05.383 回答
0

因为你没有打破 while(1) 循环。对 while 循环再使用一个 break。

于 2013-01-25T05:15:27.847 回答
0

好吧,将状态初始化为0

编译并运行程序

第一次进入 p // 这里 state =2

然后输入 r // 这里 state = 0

....由于 while(1) 继续循环

于 2013-01-25T01:11:42.747 回答