lC言語 繰り返し処理(WHILE) '96.11.14  
l.お知らせ 内容 LINK FILE   HTML Win PC Unix MS-DOS C C++ Mfc Java 
.C言語_ 3 フォ-マットコ-ド 6 演算子 9 FOR  集合デ-タ  目的別
1 表示してみる 4 変数と定数 7 条件判断 10 WHIILE  ポインタ     
2 エスケ-プ コ-ド 5 デ-タ入力 8 分岐   未使用  関数   ★ 
while  継続(continue)と中断(break)  用例  do while   
while は C++ でも重要です。 

繰り返し処理(ループ) while
指定された条件が成立している間、処理を繰返します。
その処理が終了すると、その後に書かれている別な処理に移ります。
条件が成立しない場合は、1回も処理が実行されず、その後に書かれている別な処理に移ります。

while(継続条件){ 処理; }
while(継続条件){ 処理1;処理2;処理3;...;} ...複数の処理を行う場合。
while( 0 以外の定数){ 処理; }    ...これは無限ループになります。

{ } の中の処理が一個だけのときは、{ } の記述を省略できます。
継続条件の部分には、式や関数(返り値を返すもの) を使うことができます。
継続条件の値が 0 以外なら、処理が実行されます。

例    int x=0;
  while( x < 10 ) printf( "%d ",x++ );   /* 0〜9 を表示します。*/  
printf() では、x の値を 表示した後に +1 します。
x の値が 10 未満の間、この処理が繰り返されます。


中断(break) と継続(continue) while
中断(break) は、while のループを終了します。
継続(continue) は、現在の回の残りの処理を中止して、次の回の処理に移ります。
while(継続条件)
{ /* 継続条件が成立しているなら、以下の処理が行われます。*/
  処理1;
  continue; /* 処理2 と 処理3 をパスして{ } に行きます。*/
  処理2;
  break;    /* 処理3 をパスして{ }の外に出ます。*/
  処理3;
} /* 再び { } の前に戻って、継続条件の判定を受けます。*/
実際は次のように、条件判断と組み合わせて使います。
  int x=0;
  while(x < 100)
  { printf("%d ",x++); /* x の値を表示して、+1 します。*/
    if(x == 11)        /* x=11 になったときは、    */
    { x=60;            /*  x=60 にします。      */
      continue;        /* 次のループに移ります。     */
    }
    if(x == 71) break; /* x=71 になったら、ループを終了します。*/ 
  }
0 1 2 . . . 10 60 . . . 70 と表示されます。



while のプログラム例
変数の値 i=65 を変化しながら、文字として表示し、75 になったら終了します。
( 数値の 65 は、文字 A の文字コードと同じです。)
#include<stdio.h>	/* ここに stdio.h を挿入します。OK */
void main()		/* 以下、処理の内容。*/
{
  int i=65;		/* 変数を宣言します。*/

  while(i<75)		/* i=75 未満なら継続するループを設定します。*/
  {
    printf("%c ",i++);	/* A〜Jを表示します。*/
  }
    printf("\n");	/* 最後に改行します。*/
}

以下は、継続条件に関数の返り値を利用する例です。
キーボードからの入力を表示し、リターンキーだけが押されると終了します。
#include<stdio.h>	/* ここに stdio.h を挿入します。OK */
void main()		/* 以下、処理の内容。*/
{
  char buf[128];	/* 配列変数 buf を宣言します。*/

  printf("Enter キーだけ押すと終了します。\n"); /* メッセージを表示します。*/
  printf("短文を入力して下さい。: ");
  while(gets(buf)[0])	/* キー入力が有るなら継続するループを設定します。*/
  {
    printf("%s ...と入力されました。\n",buf);	/* 入力を表示します。*/
    printf("短文を入力して下さい。: ");		/* メッセージを表示します。*/
  }
    printf("終了しました。\n");		/* 最後に終了メッセージを表示します。*/
}
gets は、キーボードから文字列を入力する関数です。
正常に入力された場合は、その格納場所のポインタを返します。
従って、gets(buf)の値は char buf[128] のアドレス= buf になります。
( buf[0] などは内容ですが、配列名はポインタになっています。)
この場合は、gets(buf) の返り値をそのまま使って、buf[0] を指定しています。
キー入力がない場合は1文字目(buf[0])に 0 が代入されるので、ループは終了します。

なお、この場合は gets(buf) がループの中ではなく、継続の判定に使われていますので、gets(buf) は最低1回は実行されます。

無限ループの例です。
#include<stdio.h>		/* ここに stdio.h を挿入します。OK */
void main()			/* 以下、処理の内容。*/
{
  int i=65;			/* 変数を宣言します。*/

  while(1)			/* 無限ループを設定します。*/
  {
    printf("%c ",i++);		/* A〜Jを表示します。*/
    if(i>=75)break;		/* J(75)なら、ループを終了します。*/
  }
    printf("\n");		/* 最後に改行します。*/
}

入力された数から百までを表示する例です。
百以上の数を入力した場合は何もしないで終了します。
#include<stdio.h>		/* ここに stdio.h を挿入します。OK */
void main()			/* 以下、処理の内容。*/
{
  int i=0;
  printf("100 以下の小さな数を入力して下さい。: ");
  scanf("%d",&i);		/* キーボードから数を入力します。*/
  while(i<101)			/* 入力が 100 以下なら、*/
  {
    printf("%d ",i++)	;	/* 入力数〜100 までを表示します。*/
  }
  printf("\n");			/* 最後に改行します。*/
}



繰り返し処理(ループ) do while
処理を行った後、同じ処理を繰り返すかどうか判定します。
継続条件が成立しているなら、再び同じ処理を行います。
処理を行った後、条件が成立してない場合は、その後に書かれている別な処理に移ります。

do{ 処理; } while(継続条件);
do{ 処理1;処理2;処理3;...; } while(継続条件);


以下の例は、前の例と同様に入力された数から百までを表示する例です。
継続判定がループの最後にあるので、100 以上の数を入力しても、その数だけは表示されます。
#include<stdio.h>		/* ここに stdio.h を挿入します。OK */
void main()			/* 以下、処理の内容。*/
{
  int i=0;
  printf("100 以下の小さな数を入力して下さい。: ");
  scanf("%d",&i);		/* キーボードから i に数を入力します。*/
  do
  {
    printf("%d ",i++)	;	/* 入力数〜100 までを表示します。*/
  }
  while(i<101);			/* 入力が 100 以下なら継続。*/

  printf("\n");			/* 最後に改行します。*/
}


T

C言語 9 FOR 10 WHIILE  集合デ-タ
 
  mtoga@sannet.ne.jp   登録日 '96. 6.15
URL : http://www.page.sannet.ne.jp/mtoga/index.html