1

以下のコードをコンパイルして実行すると、前述の出力が得られます。出力について説明してください。case 2ネストされてcase 0いるため、プログラムは何も出力しません。

#include <stdio.h>

int main() {
    int i=5;
    switch ( 2 ) {
        case 0:
            for (  i=0; i<10; i++ ) {
        case 1:
            printf("A i=%d\n",i);
        case 2:
            printf("B i*i=%d\n",i*i);
            };
        case 3:
            printf("done");
            break;
    }

    return 0;
}

/* OUTPUT
B i*i=25
A i=6
B i*i=36
A i=7
B i*i=49
A i=8
B i*i=64
A i=9
B i*i=81
done
*/
4

2 に答える 2

7

このswitchステートメントは、forループの途中 (caseラベル 2) にジャンプするだけです。次に、コードはforループを実行します。以下とほとんど同じです:

#include <stdio.h>

int main() {
    int i=5;

    goto label_2;

    for (  i=0; i<10; i++ ) {
        printf("A i=%d\n",i);
      label_2:
        printf("B i*i=%d\n",i*i);
    };

  label_3:
    printf("done");

    return 0;
}

それだけです。

于 2013-06-13T07:33:25.037 に答える
1
        for (  i=0; i<10; i++ ) {
    case 1:
        printf("A i=%d\n",i);
    case 2:
        printf("B i*i=%d\n",i*i);
        };

したがって、ケース 2 は for ループ内にあるため、出力で繰り返します。ケースを使用すると、ブレークを入れる必要があります。そうしないと、切り替え先のケースの後にすべてのケースが実行されます。

switch(2)
case 1: //blah
case 2: //blah
case 3: //blah

上記の例では、ケース 2 と 3 のコードが実行されますが、通常は次のように記述します。

switch(2)
case 1: //blah
    break;
case 2: //blah
    break;
case 3: //blah
    break;

その場合、ケース 2 のみが実行されます

于 2013-06-13T07:34:56.813 に答える