1

重複の可能性:
switchステートメントの最初の「case」の前のコード

Cには次のコードセットがあります。

void isFindValue(int value1, int value2)
{
    switch (value1)
    {
    case 1:
      printf("value1 is found!\n");
      break;

    case 2:
      printf("value1 is found!\n");
      break;

    case 3:
      switch(value2)
      {
    printf("aaaaaaaaaaaaa\n");
     case 6:
         printf("bbbbbbbbbbbb\n");
         printf("value2 is found!\n");
         break;
      }
     default:
     break;    
}

関数をそのまま呼び出した場合isFindValue(3,6); のprintfがbbbbbbbbbbbb表示されますが、表示されaaaaaaaaaaaaaません。なぜこれが発生するのでしょうか。事件の前に何かをすべきではないでしょうか?

4

5 に答える 5

6

switch ()ラベルを使用して動作するため。条件を満たしたラベルにジャンプします。だからたどり着いた時

switch(value2) {
    printf("aaaaaaaaaaaaa\n");
    case 6:

制御フローはすぐにラベルにジャンプして、 へcase 6:の呼び出しをスキップしますprintf()

解決策は、内側のスイッチの外側に正しく配置することです。

case 3:
    printf("aaaaa\n");
    switch (value2) {

于 2012-12-28T15:20:05.837 に答える
0

「aaaaaaaaaaaa」は置き場所が間違っているため表示されません(ラベルに含まれていないため、到達できません)。2 番目の switch ステートメントの前まで移動する必要があります。

case 3:
    printf("aaaaaaaaaaaaa\n");
    switch(value2)
    {
        // body
    }
于 2012-12-28T15:18:07.830 に答える
0

printfステートメント内の関数の呼び出し:

printf("aaaaaaaaaaaaa\n");

case2 番目の の最初のステートメントの前にあるため、到達できませんswitch

switch-statement の最初の「case」の前のコードを参照してください

于 2012-12-28T15:18:33.740 に答える
0

"aaaaaaaaaaaa\n" はどの .xml 内にも出力されていませんcase。コードが適切に構成されていません。

次のようにステートメントをswitchブロックの外に移動してみてください。

printf("aaaaaaaaaaaaa\n");
switch(value2)
{
    case 6:
        printf("bbbbbbbbbbbb\n");
        printf("value2 is found!\n");
        break;
}
break;
于 2012-12-28T15:19:42.373 に答える
0

スイッチは常に検索するためcaseaaaaaaaaaaaaスキップされました。case関連するブロックのステートメントを実行します。

于 2012-12-28T15:20:33.750 に答える