breakとcontinueについて

最終更新日:2004-07-02.

今回は、breakとcontinueについてちょっと。
これらは、for文やwhile文などで使用されます。

breakは、現在行われている繰り返し処理から抜け出ます。

continueは、現在行われている繰り返し処理の先頭へ
処理を移します。

どちらも一番近くの繰り返し処理に対して作用します。
繰り返し処理を複数組み合わせていても、
作用するのは一番近くです。

また、continueでは、for文とwhile文で処理がループの先頭へ
移ったとき、多少違いがあります。
それは、for文では第3番目の引数が実行される点です。

以下は、文字列の長さを調べるためのソースです。
単純にバイト数を調べるもの、全角文字を考慮して
文字数を数えるものを作ってみました。

では、ソースにしてみましょう。
+------------------------------------------------------------+
/* filename=no029-1.c */
/* include */
#include <stdio.h>
#include <jctype.h>
/* 関数プロトタイプ宣言 */
int my_strlen(char *);
int my_jstrlen(char *, int *);
/* main */
int main( )
{
int num1, num2;
char word1[8]="JAPAN";
char word2[8]="日本1";
num1=my_strlen(word1);
printf("%s, %d\n", word1, num1);
num2=my_jstrlen(word2, νm1);
printf("%s, %d, %d\n", word2, num1, num2);
return 0;/* 終了 */
}
/* 文字列の長さ(バイト数) */
int my_strlen(char *s)
{
int len;
len=0;
/* 文字列の最後まで繰り返す */
while( *(s++) )
len++;
return len;/* 戻る */
}
/* 文字列の長さ(バイト数、文字数) */
int my_jstrlen(char *s, int *len1)
{
int type, len2, err;
(*len1)=0;
len2=0;
type=0;
err=0;
/* 文字列の最後まで繰り返す */
while( *s ){
/* 文字種を判別 */
type=chkctype(*s, type);
/* バイト数 */
(*len1)++;
s++;
if( type==CT_ANK )
;
else if( type==CT_KJ1 )
;
else if( type==CT_KJ2 )
continue;
else if( type==CT_ILGL )
err=-1;
/* 文字数 */
len2++;
}
if( err!=0 )
return err;
return len2;/* 戻る */
}
+------------------------------------------------------------+

上記をコンパイルして実行すると、以下のように表示されました。
JAPAN, 5
日本1, 5, 3

戻る