6

私はCに不慣れで、助けが必要です。私のコードは次のとおりです。

 #include<stdio.h>  
 #include<conio.h>  
 void main()
 {

  int suite=2;  

  switch(suite)
     {           
      case 1||2:
      printf("hi");

      case 3:
      printf("byee");

      default:
      printf("hello");
     }

  printf("I thought somebody");
  getche();
  }

私はTurboCで作業しており、出力はhelloI thought somebodyです。エラーメッセージはありません。

これがどのように機能しているか教えてください。

4

6 に答える 6

15
case 1||2:

になりtrueます。となりますcase 1:が、渡された値は2です。したがって、デフォルトのケースが実行されました。その後、あなたはprintf("I thought somebody");処刑されました。

于 2012-11-05T04:59:58.567 に答える
8

これを行う:

switch(suite){
  case 1:/*fall through*/
  case 2: 
    printf("Hi");
...
}

これは、それを行うためのはるかにクリーンな方法になります。式は2と1||2評価され1suite1にも3にも一致せず、大文字とdefault小文字が区別されます。

于 2012-11-05T04:57:24.570 に答える
3
case 1||2:

結果は

case 1:

1 || 2は に評価されるため(1覚えておいてください。ステートメントでは定数整数式のみが許可されているcaseため、1 つの で複数の値をチェックすることはできませんcase)。

使用したい:

case 1:
  // fallthrough
case 2:
于 2012-11-05T05:02:55.397 に答える
0

ステートメントの大文字と小文字が一致switchする value をオンにすると、「hello」が出力され、最後の行に「I think someone」が出力されます。2defaultswitch

于 2012-11-05T05:01:18.757 に答える
-1
case (1||2):
  printf("hi");

かっこを入れて魔法を見るだけです。

あなたのコードでは、プログラムは最初の値をチェックしてダウンします.2が見つからないため、その後デフォルトのケースに進みます.

ただし、括弧を使用して、両方の用語、つまり 1 と 2 が一緒であることを指定すると、希望どおりに実行されます。

于 2016-09-20T21:20:51.013 に答える