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ループを停止したくないのですが、連続ループではケース0が機能し続けたいのですが、入力p​​を取得すると、printfを一時停止して実行し、arが取得されるまでケース0を再開します。 ..したがって、プログラムは停止することはありませんが、それぞれのケースを実行するために「P」または「R」のいずれかを取得するのを待ちます...私は理にかなっていると思います

どんな助けでもありがたいです。

4

5 に答える 5

3

あなたのはではなくbreakから抜け出しています。外側のループから抜け出すには、ある種のブールフラグを使用する必要があります。例:switch ... casewhile

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を無視して)、2つの状態があります。

  1. 待ってくださいp。入手したら、2に進みます。

  2. printfを取得するまでキャラクターごとにr、次に1に移動します

あなたが欲しいものは:

  1. 待ってくださいp。入手したら、2に進みます。

  2. を実行してprintfから、3に進みます。

  3. 待ってくださいr。入手したら、1に進んでください。

于 2013-01-25T01:10:46.937 に答える
1

while(1)ステートメントを使用して無限ループを作成しましたが、終了する可能性はありません。スイッチ内のbreakステートメントは、whileループではなく、switchステートメントに適用されます。スイッチの外部に別のbreakステートメントが必要です。

于 2013-01-25T01:11:05.383 に答える
1

私はあなたが何を求めているのかわかりませんが、ケース2であなたが何を望んでいるのかはかなり確信しています:

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

while(1)ループを壊していないからです。whileループにもう1つブレークを使用します。

于 2013-01-25T05:15:27.847 に答える
0

さて、状態を0に初期化します

プログラムをコンパイルして実行します

初めてpを入力//ここにstate=2

次にrを入力します//ここにstate=0

.... while(1)のためにループを続行します

于 2013-01-25T01:11:42.747 に答える