概ね方位不定だが多分割と偏っている
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


C その他の制御構造
2006年09月01日 (金) | 編集 |
その他の制御構造、なんて十把一絡げにされていることからも分かるが、あまり使われない構文らしい。しかし十把一絡げが一発で変換される辺り侮れないなIME。時折凄く御馬鹿な癖に。
使用頻度が低いとされているせいか、テキストはあまり多くない。
ちゃっちゃといこう。


continue文
ループの途中からループの先頭に戻る働きをする。
ループ内でcontinueが実行されると、ループ内のそれ以降の処理をすっ飛ばしてループの先頭に戻り、またループを繰り返す。

while(式){
 文1
 if(条件)
  cotinue;
  文2
}


書式はこんな感じ。
if(条件)が真なら文2とかの処理をスキップしてループの先頭に戻るという事だな。

確かに何に使うのかイマイチよく分からないな。
何かしらには使えるのだろうか。



goto文
指定したとび先に飛ぶ、のか?
Cではあまり使う必要のない処理だそうだが、多重ループから抜けるのには有効らしい。
ラベルと呼ばれる飛び先に飛ぶ。ラベルは文につけるものだが、文が無い場合には空文と呼ばれる;だけの文を置かなくてはならないそうだ。

for(i=0;i<10;i++)
 for(j=0;j<9;j++)
  for(k=0;k<8;k++)
   if(条件)
    goto eol;

eol:;


こんな感じ。最後のeol:;というのが空文で、eolというのがラベルだな。
例えば、

static int a[3][3]={{1,2,3},{4,5,0},{0,1,2}};

 for(j=0;j<3;j++){
  for(k=0;k<3;k++){
   if(a[j][k]==0)
    goto eol;
  }
 }
eol:printf("%d %d",j,k);


こんなプログラムを実行した場合、表示される値は

1 2

になる。

goto_test.jpggoto_test2.jpg
この通り

1 2 2 0

でないことに注意。
最初にa[j][k]が0になった時点でループ外に飛ぶ為、それ以降のループは行われず、a[2][0]の0は意味無しってことだな。



無限ループ
条件次第で無限ループを作れるとのこと。
とはいえ、普通は意図的にそんなもの作る必要はないらしいが。

for(;;){
なんか文
}


for文のループ。条件判断式が無いので無限ループする。

while(1){
なんか文
}


while文のループ。式の値が1であり、真であるので無限ループになる。
無限ループになるからどうしたっつうか、無限ループになってしまうとダメなんだが、何かのテストをするような場合には遣う場合もあるそうな。

物騒な話だな。



まとめよう。つってもあまりまとめることないけど。

ループの以降をスキップして繰り替えす処理としてcontinue
特定の場所へ飛ぶ為の処理としてgoto
迂闊な条件を指定すると無限ループになる危険がある


以上。これで制御構造の章も終わりだ。
入門書の残りは1/3か。思えば遠くに来たものだ。

ここから先が難儀臭いが。
スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。