2016-03-26 17 views
2

これは単なる一般的な質問です。if文に改行を入れる必要がある場合、なぜwhile操作の条件を気にする必要がありますか?

私は

do 
    { 
     scanf("%i", &Carselect); 
     if (Carselect == 1) 
     { 
      mass = 1100; 
      velomax = 200; 
     } 
     else if (Carselect == 2) 
     { 
      mass = 1888; 
      velomax = 415 
     } 
     else if (Carselect == 3) 
     { 
      mass = 18000; 
      velomax = 129; 
     } 
     else 
     { 
     printf("Error in input. Please enter 1, 2 or 3.\n"); 
     } 
    } 
    while (Carselect != 1 || Carselect != 2 || Carselect != 3); 

もともと

これを書いていると私はループに捕まってしまいました。私は、有効な条件のための書類に休憩を入れて、それは私が出すために許可され、この

do 
    { 
     scanf("%i", &Carselect); 
     if (Carselect == 1) 
     { 
      mass = 1100; 
      velomax = 200; 
      break; 
     } 
     else if (Carselect == 2) 
     { 
      mass = 1888; 
      velomax = 415; 
      break; 
     } 
     else if (Carselect == 3) 
     { 
      mass = 18000; 
      velomax = 129; 
      break; 
     } 
     else 
     { 
     printf("Error in input. Please enter 1, 2 or 3.\n"); 
     } 
    } 
    while (Carselect != 1 || Carselect != 2 || Carselect != 3); 

ようですが、私はそうとすぐCarselectは1、2または3に等しいように、しばらくの間、条件は繰り返しの条件だったと思いましたループを終了します。 if文に改行を入れる必要がある場合、なぜwhile演算の条件を気にする必要がありますか?

このレベルのロジックが必要なマシンレベルまたはそれ以外には、何がありますか?

+2

'||'は '&&'に変更 – BLUEPIXY

+0

真剣に?私はORよりむしろAND条件を入れていたのですか?私を撃ちなさい うん、それは働いた –

+0

タイトルを見てください。作業プログラム/例の有効なコードを見てください。タイトルをもう一度見てください。なぜタイトルが間違っていますか? – user2864740

答えて

6

編集(質問のタイトルが変更されたとして):

間でのチェック条件/やる-whileループは、主にプログラムがに滞在するか取得するかどうかを判断するためにチェックされているものですwhile/do-whileループの中でbreak文ではありません。

場合、break文は、通常使用されている:あなたはときに、特定のは例外

  • それはブロック内のすべての文を実行している前または
  • 中/やる-ながら、ブロック から抜け出すにしたい

    1. ループ全体のループをループする前に終了条件に到達するか、または
    2. 無限ループを作成し、エラー、ループまたは
    3. 私は基本的に...

    を認識していない可能性がありますいくつかの他の他の例を継続することができないとなりブレイク文は、通常どおり/しばらくを終了するために使用さないありますプログラムが(より良い用語の欠如のために)続行する限り、ブロックブロック内に"標準/メイン"パスがあります。一方で対照的に

    条件 /行いながら、プログラムループブロック内「標準/主」経路をたどるときにループがループを終了するために使用あります。

    オリジナル:

    あなたはNOT平等チェック(==)にあなたの不等式チェック(!=)を変更する必要があります。

    while (!(Carselect == 1 || Carselect == 2 || Carselect == 3)); 
    

    あなたが本当にしたいことは限り

    Carselectあなたは、代わりに(1または2または3)

    ができないとして継続するループのためであるためですまたは演算子(||)を演算子(&&)に変更すると、同じロジックになります。

    while (Carselect != 1 && Carselect != 2 && Carselect != 3); 
    

    Carselectはすぐに含むブロックの}次のステートメントに移動します、そしてを続けるステートメントに移動しますC ブレークでは1と2ではなくではなく3

    +0

    確かに。 –

    +0

    数字が同時に3つの値を持つことはできないので、真です。 – Ian

    +0

    私はそれを逆に考えていました。 –

    0

    ではありません収容ブロックの{の直後にある。両方とも長いブロックで役に立ちます。たとえば、エラー状態が発生した場合や、単純な入力が検出され、完全なブロックの処理がすべて必要ではない場合は、に続けてを取得し、次の入力を取得します。

    +0

    ** else **を2回使用している場合は、** switch/case **構造が読みやすくなります。 –

    +0

    質問そのもののコメントとして、これは間違って考えられたwhile条件であり、(2)ここでのループは無効な入力を捕捉するためのループであり、メインループではないことを薦めてください。 –

    関連する問題