無限ループって永久に抜けないの?
会社に入って始めてプログラムを作り始めた頃は「無限ループ(繰返し)」が理解できませんでした。
「無限」に「ループ(繰返し)」・・・いつまでも処理終わらないのはいくらなんでもまずいのでは・・・?と。
先輩に聞いても「旗(フラグ)立てて抜ければいいの」と言われても「???」といった感じ。
でも、これができないとプログラムを作る上で何かと大変。
始めにはまったのは、ループ(繰返し)の回数があらかじめ解っていないと処理ができないとなればファイルの中身を読むのに読む前から何行あるか解っていないといけない・・・。何行あるか知るためにはファイルを読まなければ解らない・・・読むためには何行あるのか知っておく必要がある・・・と頭の中が「無限ループ」。
理解で来ればなんてことはないのですが、それまでが素人だった私には超難関でした。
C言語での無限ループの作り方
C言語では「無限ループ(繰返し)」を「for文」でも「while文」でも作成できます。
まずは「for文」。
for( ; ; ){
ループ内の処理1;
ループ内の処理2;
}
「for文」の場合はforの中に書く「初期化」、「継続条件」、「増分処理」を省略します。
(「初期化」、「継続条件」、「増分処理」については繰り返し(ループ)制御 for文を参照して下さい。)
実際は「継続条件」か「増分処理」を省くと無限ループします。
個人的には「for文」より「while文」で「無限ループ(繰返し)」を書く方が好きです。(単に好みです。)
while( 1 ){
ループ内の処理1;
ループ内の処理2;
}
当然、どちらでも実現は可能ですが終了条件が成り立たないと
本当に「無限ループ(繰返し)」しますので仕様には最新の注意が必要です。
実際のソースは以下のようになります。(エラー処理省略。)
(例)for文
FILE *fp ; char buf[ 2048 ] ; char *p ; fp = fopen( "test.txt", "r" ) ; //ファイルオープン for( ; ; ){ //無限ループ(繰返し) p = fgets( buf, 2048, fp ) ; //1行読み込み if( p == NULL ){ //ファイルの終端は break ; //ループ抜ける } printf( "buf=[%s]", buf ) ; //内容表示 } fclose( fp ) ; //ファイルクローズ
(例)while文
FILE *fp ; char buf[ 2048 ] ; char *p ; fp = fopen( "test.txt", "r" ) ; //ファイルオープン while( 1 ){ //無限ループ(繰返し) p = fgets( buf, 2048, fp ) ; //1行読み込み if( p == NULL ){ //ファイルの終端は break ; //ループ抜ける } printf( "buf=[%s]", buf ) ; //内容表示 } fclose( fp ) ; //ファイルクローズ