C言語 標準関数 | 応用 | サンプル
■while文:先に条件式を評価して、真であれば処理を実行する。
■for文:while文と同様に先に条件式を評価して、真であれば処理を実行する。
■do..while文:while文やfor文と異なり、処理を実行してから条件式を評価する。
真とは偽(0)以外を指します。つまり、偽以外は全て真(!0)です。
各々の詳細は以降を参照して下さい。
while文の一般式は次のようになっています。
while( 条件式 ) { 処理 }
次の処理
先に「条件式」を評価してその結果が真(!0)であった場合、「処理」を行います。
条件式の評価結果が偽(0)であった場合、「処理」を行わず、「次の処理」を行います。
「処理」中にbreak文があった場合は、その時点で処理を中断して条件式を評価せずに「次の処理」を行います。
「処理」中にcontinue文があった場合は、その時点で「処理」を中断して(再度)「条件式」を評価します。
main() {
int cond1;
cond1 = 3;
while( cond1 ) {
printf( "cond1(a)=%d\n" , cond1-- );
}
printf( "----------\n" );
cond1 = 0;
while( cond1 ) {
printf( "cond1(b)=%d\n" , cond1++ );
}
printf( "----------\n" );
cond1 = 0;
while( cond1 == 0 ) {
printf( "cond1(c)=%d\n" , cond1++ );
}
printf( "----------\n" );
cond1 = 0;
while( 1 ) {
cond1++;
if( cond1 < 3 ) {
printf( "cond1(d)=%d\n" , cond1 );
continue;
}
break;
}
}
cond1(a)=3
cond1(a)=2
cond1(a)=1
----------
----------
cond1(c)=0
----------
cond1(d)=1
cond1(d)=2
for文の一般式は次のようになっています。
for( 初期化式 ; 条件式 ; 再初期化式 ) { 処理 }
次の処理
「初期化式」はfor文の実行時に最初に一回だけ実行されます。2回目以降の初期化式には、「再初期化式」を使用します。
初期化式(再初期化式を含む)を実行後に条件式を評価します。
条件式の評価結果が真(!0)であった場合は、「処理」を行います。
条件式の評価結果が真であった場合の実行の順序は、
初期化式(初回だけ) → 条件式 → 処理 → 再初期化式(2回目以降) → 条件式 → 処理 → 再初期化式(2回目以降) → 条件式 → 処理・・・
であり、条件式の評価結果が偽になるまで、この実行順序の繰り返しになります。
尚、初期化式、条件式、再初期化式は省略することも可能ですが、セミコロン(;)は必要です。初期化式、条件式、再初期化式の全てを省略した場合は、
for( ; ; ) { 処理 }
のような記述になります。条件式を省略した場合の評価結果は常に真です。
「処理」中にbreak文があった場合は、その時点で処理を中断して条件式を評価せずに「次の処理」を行います。
「処理」中にcontinue文があった場合は、その時点で「処理」を中断して(再度)「条件式」を評価します。
main() {
int i , k;
/* よくあるfor文 */
for( i=0 ; i<3 ; i++ ) {
printf( "i=%d\n" , i );
}
/* 処理が1度も実行されないfor文 */
for( k=0 ; k==1 ; k++ ) {
printf( "k=%d\n" , k );
}
}
i=0
i=1
i=2
do..while文の一般式は次のようになっています。
do { 処理 } while( 条件式 )
次の処理
先に「処理」を実行してから「条件式」を評価して、真であれば再度「処理」を行う。
「処理」中にbreak文があった場合は、その時点で処理を中断して条件式を評価せずに「次の処理」を行います。
「処理」中にcontinue文があった場合は、その時点で「処理」を中断して(再度)「条件式」を評価します。
main() {
int i;
/* 1回だけ「処理」を実行 */
i = 0;
do {
printf( "i(a)=%d\n" , i );
} while ( i != 0 );
/* 複数回「処理」を実行 */
i = 0;
do {
printf( "i(b)=%d\n" , i );
if( i < 2 ) {
printf( "i(c)=%d\n" , i++ );
continue;
}
printf( "i(d)=%d\n" , i );
break;
} while ( i < 5 );
}
i(a)=0
i(b)=0
i(c)=0
i(b)=1
i(c)=1
i(b)=2
i(d)=2