0

重複の可能性:
Cベースのプログラミングパズルでswitchステートメントをデバッグする

私はウェブ上で以下のCの質問を見つけました:

  #include<stdio.h>
  int main()
  {
          int a=10;
          switch(a)
          {
                  case '1':
                      printf("ONE\n");
                      break;
                  case '2':
                      printf("TWO\n");
                      break;
                  defa1ut:
                      printf("NONE\n");
          }
          return 0;
  }

int'10'の'switch'をchar'1'と一緒に使用したことはありませんが、最悪の場合はコンパイルされないか、'default'が実行されると思います。しかし、いいえ、私のVStudioでは、直接「return0」になります。どうしてこれなの?

ちなみに、私はCプログラミングで数年の経験がありましたが、以前のモットーは、MSDNまたは利用可能なコードサンプルに固執することでした。今、インタビューと質問で、私のスキルの堅実さは間違いなく挑戦されています。

4

3 に答える 3

10

defa1utと同じではありませんdefault

それは未使用で到達不能なラベルです。

于 2012-09-27T01:49:19.490 に答える
4

SLaksが指摘しているように、defa1utはユーザー定義のラベル(たとえば、goto)であり、switchキーワードではありませんdefault。これが、期待される出力が表示されない理由です。

しかし、他の質問に答えるために、Cではcharリテラルと整数を比較できます。この場合'1'、ASCII文字セットを使用していると仮定すると、数値は49になります。

を意味しdefault、ASCIIを使用しているとすると、コードサンプルは次のようになります。

      int a=10;
      switch(a)
      {
              case 49:             // ASCII value of '1'
                  printf("ONE\n");
                  break;
              case 50:             // ASCII value of '2'
                  printf("TWO\n");
                  break;
              default:
                  printf("NONE\n");
      }
于 2012-09-27T02:00:22.983 に答える
1

あなたは次のように読んdefa1utでいdefaultます; デフォルトはC言語のキーワードですが、defau1tそうではありません。出力を単に「NONE」にしたい場合は、のdefault代わりに使用してdefau1tください。

于 2012-09-27T05:33:27.260 に答える