C#でのswitch文のコンパイルエラー

このQ&Aのポイント
  • C#のswitch文でコンパイルエラーが発生する問題について解説します。
  • コンパイルエラーの原因として、ラベル間の制御フローが正しく設定されていないことが考えられます。
  • 解決策として、各case文の終了後にbreak文を追加する方法があります。
回答を見る
  • ベストアンサー

C#でのswitch文

初歩的な質問ですいません 下のようなswitch文(チェーンコードのプログラム)で、コンパイルすると、 コントロールはひとつのcaseラベル('case 0~7:')から別のラベルへ流れ落ちることはできません。 というコンパイルエラーがでます。 continueをbreakに変えてもだめでした。 よろしくお願いします。 switch (vec) { case 3: if (data[x,y + 1] == 0 && data[x - 1,y + 1] == 1) { x = x - 1; y = y + 1; list.Add(1); l++; vec = 0; continue; } case 4: if (data[x - 1,y + 1] == 0 && data[x - 1,y] == 1) { x = x - 1; y = y + 0; list.Add(2); l++; vec = 1; continue; } case 5: if (data[x - 1,y] == 0 && data[x - 1,y - 1] == 1) { x = x - 1; y = y - 1; list.Add(3); l++; vec = 2; continue; } case 6: if (data[x - 1,y - 1] == 0 && data[x,y - 1] == 1) { x = x + 0; y = y - 1; list.Add(4); l++; vec = 3; continue; } case 7: if (data[x,y - 1] == 0 && data[x + 1,y - 1] == 1) { x = x + 1; y = y - 1; list.Add(5); l++; vec = 4; continue; } case 0: if (data[x + 1,y - 1] == 0 && data[x + 1,y] == 1) { x = x + 1; y = y + 0; list.Add(6); l++; vec = 5; continue; } case 1: if (data[x + 1,y] == 0 && data[x + 1,y + 1] == 1) { x = x + 1; y = y + 1; list.Add(7); l++; vec = 6; continue; } case 2: if (data[x + 1,y + 1] == 0 && data[x,y + 1] == 1) { x = x + 0; y = y + 1; list.Add(8); l++; vec = 7; continue; } vec = 3; }

質問者が選んだベストアンサー

  • ベストアンサー
  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.1

breakはif文の外側では? switch (vec) { case 3: if (data[x,y + 1] == 0 && data[x - 1,y + 1] == 1) { x = x - 1; y = y + 1; list.Add(1); l++; vec = 0; } break; //ここでBreak; case 4: 省略 }

blade3322
質問者

お礼

なんて単純なミスを・・・ ありがとうございます

関連するQ&A

  • 画像処理のチェーンコード

    画像処理のチェーンコードが上手くいきません。 言語はC#です。下のようにやってますが、どこかで上手くいっていないみたいです。間違いの指摘をおねがいします。 あるいは、画像処理のチェーンコードのサンプルコードのあるサイトを教えてもらえると助かります。言語はメジャーなものならなんでもかまいません。 for (; ; ) { if (x == xs && y == ys && l != 0) { break; } switch (vec) { case 3: if (data[x, y + 1] == 0 && data[x - 1, y + 1] == 255) { x = x - 1; y = y + 1; list.Add(1); l++; } vec = 0; break; case 4: if (data[x - 1, y + 1] == 0 && data[x - 1, y] == 255) { x = x - 1; y = y + 0; list.Add(2); l++; } vec = 1; break; case 5: if (data[x - 1, y] == 0 && data[x - 1, y - 1] == 255) { x = x - 1; y = y - 1; list.Add(3); l++; } vec = 2; break; case 6: if (data[x - 1, y - 1] == 0 && data[x, y - 1] == 255) { x = x + 0; y = y - 1; list.Add(4); l++; } vec = 3; break; case 7: if (data[x, y - 1] == 0 && data[x + 1, y - 1] == 255) { x = x + 1; y = y - 1; list.Add(5); l++; } vec = 4; break; case 0: if (data[x + 1, y - 1] == 0 && data[x + 1, y] == 255) { x = x + 1; y = y + 0; list.Add(6); l++; } vec = 5; break; case 1: if (data[x + 1, y] == 0 && data[x + 1, y + 1] == 255) { x = x + 1; y = y + 1; list.Add(7); l++; } vec = 6; break; case 2: if (data[x + 1, y + 1] == 0 && data[x, y + 1] == 255) { x = x + 0; y = y + 1; list.Add(0); l++; } vec = 7; break; } }

  • switch文について

    お世話になります。switch文について教えてください。 分岐の条件を複数使用することは出来ますか。 たとえば switch(a) [ case "1": if (x == "0") { document.write(1x0); } else if (x == "1") { document.write(1x1); else { document.write(1x); break; } case "2": if (x == "0") { document.write(2x0); } else if (x == "1") { document.write(2x1); else if (y == "0") { document.write(2y0); else { document.write(2x); break; ] という構文は可能ですか。 case 2でx yの二分岐しても可能ですか。 教えてください。

    • ベストアンサー
    • Java
  • C++ Switch文について

    int main(){ char Data1 = 'b'; char Data2 = 'b'; int IntData = 0; switch (Data2) { case Data1: IntData = 2; break; case'b':  IntData = 3; break; } } と書くとコンパイルエラーで「整数型定数でなければいけません」と言われます。 case Data1: IntData = 2; break;をコメントアウトすると正常に動作します。 char Data1 = 'b';と、直書きの'b'の違いは何でしょうか。

  • switch文かif文か?

    スイッチ(SW50~SW80)を押したら、それに対応したコマンドを送る。というものを作っています。 スイッチはスライドスイッチなので、 1)ON(0)の間だけコマンドを出して、OFF(1)は止める。 2)ONしている間に別のスイッチが入ったら止める。 という風に組みたいのですが、中々上手くいきません。 8ピンのスライドスイッチなのですが、1~4はIDとして、5~8をコマンドとして使います。 なので、1~4は絶対にONになります。とすると、2)にしたいとき、defaultが使えなくて…if文を入れたらややこしくなりました。 もっと簡潔に、かつ解りやすく書くにはどうしたらいいでしょうか? #define SW1 input(PIN_C0) // ID #define SW2 input(PIN_C1) // ID #define SW3 input(PIN_C2) // ID #define SW4 input(PIN_C3) // ID #define SW50 PIN_C4 #define SW60 PIN_C5 #define SW70 PIN_C6 #define SW80 PIN_C7 uchar LED_ON(void){ uchar DATA; DATA=0x50; DATA+=0x4F; DATA+=0x4E; return(DATA); } uchar LED_OFF(void){ uchar DATA; DATA=0x50; DATA+=0x4F; DATA+=0x46; return(DATA); } void LED(void){ ulong n; uchar DATA; while(1){ WriteFSKbyte(DATA); switch(n){ case SW50:DATA=LED_ON(); if((SW50||SW60||SW80)==0){ DATA=LED_OFF(); } break; case SW60:while(SW60==0){ DATA=LED_ON(); DelayMs(1000); DATA=LED_OFF(); DelayMs(1000); if((SW50||SW70||SW80)==0) break; } break; case SW70:while(SW70==0){ DATA=LED_ON(); DelayMs(500); DATA=LED_OFF(); DelayMs(500); if((SW50||SW60||SW80)==0) break; } break; case SW80:DATA=LED_OFF(); if((SW50||SW60||SW80)==0){ DATA=LED_OFF(); } break; } } }

  • switch文を教えてください。

    以下のスイッチ文はcounterが特定の時にある値を代入する文ですが、 マッチした時全部同じ処理をしてしまいますよね。 case 50: の時だけ enemy[i].pattern=2; ではなく、 enemy[i].pattern=0; にしたいんです。 どうすればいいでしょうか。 やはりif文を使うしかないのでしょうか? これだけが実現できるとりあえずの処理ではなくて、これからドンドンcase文が増えていくものとして汎用性の高い書き方にしたいです。 switch(counter){   case 50:   case 350:   case 650:   case 950:   case 1250:   case 1550:   case 1850:   case 2150:     enemy[i].pattern=2; //どういう軌道を描くか     enemy[i].flag=1; //出現フラグを立てる     enemy[i].counter=0;//カウンター初期化         enemy[i].size=0.5f;//敵の大きさ     enemy[i].range=10.0f//範囲     enemy[i].x=210.0; //xの初期座標     enemy[i].y=-10.0; //yの初期座標     break;   default:     break; } どなたかよろしくお願いします><

  • なぜコンパイルエラーにならない?

    flag: for ( int i= 0 ; i<5 ; i++){ for(int j=0 ; j<3 ; j++){ label:  if(i<j){ i++; continue label; } System.out.println("あ"); } } ある問題集の問題なのですが、ラベルをfor かwhile 以外につけているのでコンパイルエラーになるという問題でした。 納得。 確かに、打ち込んでみると、コンパイルエラーになります。 しかし、continue を break に変更すると、コンパイルエラーにはならないのです。 なぜでしょうか。 テキストでは、break であれ continueであれ、for や while 以外につけるとコンパイルエラーになると書かれています。 どなたか、教えていただけますか?

    • ベストアンサー
    • Java
  • 初級プログラミングCです

    -11x+97y=1 という関数を満たす整数(x、y)を求めるプログラムなんですが 自力で考えると #include<studio.h> void main() { int x,y,a; for(x=1;;x++){ for(y=1;;y++){ a=-11*x+97*y+1 if (a==o) printf("(%d,%d)\n",x,y); if (a=!0) break } for(y=0;;y--){ a=-11*x+97*y+1 if (a==o) printf("(%d,%d)\n",x,y); if (a=!0) break } } for(x=1;;x--){ for(y=1;;y++){ a=-11*x+97*y+1 if (a==o) printf("(%d,%d)\n",x,y); if (a=!0) break } for(y=0;;y--){ a=-11*x+97*y+1 if (a==o) printf("(%d,%d)\n",x,y); if (a=!0) break } } } こうなりました xもyも上限がないのでこれでは無限ループであたいがでないとおもいます 実行するにもソフトがないのでわかりませんが たぶん間違えています どこが違いますかね? 根本的に違ったりしますか? 回答お待ちしています

  • phpのswitch文

    お世話になります。下記のようなフォームがあります。 <form method="post"><input type="submit" value="新規登録" name="registration"><form method="post"><input type="submit" value="一覧" name="list"></form> 新規登録と一覧、2つのボタンがあるのですが押されたボタンによって処理を区別したいです。 データを受け取るPHP内に下記のように記述したのですが思い通りの結果になりません。アドバイスを宜しくお願いします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <?php switch(ココの記述が判りません){ //新規登録画面を表示 case "registration": print "新規登録!"; break; //一覧を表示 case "'list', )": print "一覧表示"; break; default: print "ココがデフォルト表示"; } ?> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー if文だとif(isset($_POST["registration"])){の記述で分岐できたのですが、条件分岐が多いのでswitch文で書きたいです。 宜しくお願いします

    • ベストアンサー
    • PHP
  • c言語迷路問題!!!緊急

    以下のプログラム毎行一つずつ、コマンド書いてほしいです。地図大きから書いてないでず、他のコマンドよろしくお願いします、ありがとうございます。 #include <stdio.h> #define MAP_X 39 // X座標 #define MAP_Y 43 // Y座標 #define LOL 24 void map() ; // 地図 void cm() ; void trap() ; void map1() ; int ws[ LOL * MAP_X ] ; int wk[ MAP_X * MAP_Y ] = { }; int a = 1 ; char com ; int pz = 1599 ; int main( void ) { int flg = 1 ; map() ; while( flg != 0 ) { cm() ; switch( com ) { case 'w' : if( wk[ pz - 39 ] == 0 ) { wk[ pz - 39 ] = 2 ; wk[ pz ] = 0 ; pz -= 39 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 's' : if( wk[ pz + 39 ] == 0 ) { wk[ pz + 39 ] = 2 ; wk[ pz ] = 0 ; pz += 39 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'a' : if( wk[ pz - 1 ] == 0 ) { wk[ pz - 1 ] = 2 ; wk[ pz ] = 0 ; pz -= 1 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'd' : if( wk[ pz + 1 ] == 0 ) { wk[ pz + 1 ] = 2 ; wk[ pz ] = 0 ; pz += 1 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'j' : if( wk[ pz + 2 ] == 0 ) { wk[ pz + 2 ] = 4 ; wk[ pz ] = 0 ; pz += 2 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'e' : printf( "GAME OVER\n" ) ; flg = 0 ; break ; } } } void map() { int i ; map1() ; for( i = 0 ; i < MAP_X * LOL ; i++ ) { if( ( i / MAP_X ) == a ) { printf( "\n" ) ; a++ ; } switch( ws[ i ] ) { case 1 : printf( "■" ) ; break ; case 2 : printf( "※" ) ; break ; case 3 : printf( "宝" ) ; break ; case 4 : printf( "☆" ) ; break ; case 5 : printf( "" ) ; break ; default : printf( " " ) ; break ; } } a = 1 ; printf( "\n" ) ; printf( "コマンド入力 : " ) ; } void map1() { int i ; for ( i = 0 ; i < (LOL * MAP_X) ; i++ ) { ws[i] = wk[i + (MAP_X * 19 ) ] ; } } void cm() { scanf( "%s" , &com ) ; }

  • switch文の中でforeach

    switch文の中でforeachをしたいのですが、うまくいきません。 <現状> $x=5; switch( $x ){  case 2:   echo $x="JavaScript";    break;  case 5:   echo $x="PHP";   break;  default:   echo $x="未分類"; } <やりたいこと>判定データを別で用意して、読み込ませたい $x_master = array(  2 => "JavaScript",  5 => "PHP", ); ■テスト1 $x=5; switch( $x ){  foreach( $x_master as $key => $value ){   case $key:    echo $x=$value;   break;  }   default:    echo $x="未分類"; } これを試すと、Parse error: syntax error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}'となります。これは、switchの中でforeachは使えないということでしょうか? ■テスト2 $x=5; foreach( $x_master as $key => $value ){  switch( $x ){   case $key:    echo $x=$value;    break;   default:    echo $x="未分類";  } } $x=2;だとJavaScript未分類となるのに、$x=5;だと未分類未分類になります。 $x=2と$x=5で挙動が異なる理由が分かりません。 ■テスト3 $x=5; foreach( $x_master as $key => $value ){  switch( $x ){   case $key:    echo $x=$value;   break;  } } これでようやく望んだ結果が得られたのですが、これでo.k.のなのでしょうか? なんでdefault入れてはダメなのでしょうか? foreachでいくら回しても、該当部分が存在する限り、breakして、defaultへはいかないと思うのですが…。それともforeachの一番最後の終了処理で何かが返ってきて、それが該当項目に存在せず、defaultへ流れる結果となるのでしょうか? そもそも、考え方として、foreachで回している以上、この場合、例外というか、switch文のdefaultに該当する部分は必要ないとの認識でよいでしょうか? 質問内容 ■テスト1が、syntax errorとなる理由 ■テスト2で、$x=2なら$x_masterを読み込むのに、$x=5なら$x_masterを読み込まない理由 ■テスト3のケースは、default部分を本当に書かなくてo.k.でしょうか? またその理由は?

    • ベストアンサー
    • PHP