toshpit

Tosh Land

洗濯と掃除を効率的に!ズボラでも楽チンに!

【MacでC言語】初心者向け〜レッスン5〜

mac C言語

Macintosh (OS 10.15 Catalina)でC言語をプログラミングする方法を解説していきます。

 

この記事の対象者

  • Macユーザー
  • プログラミング初心者
  • C言語初心者

前回は for ループ処理の応用編として、ループを一部飛ばしたり、無限ループを使う方法など、特殊なループの使い方について解説しました。今回は while ループ(do-while)について解説していきます。

前回の記事はこちら↓

 

while

条件を満たす間、処理を繰り返す命令文です。

書き方は以下の通りです。

while(条件){処理}

条件の箇所は、判定結果が True / False(真/偽)となるような式を書くのがセオリーです。例えばこのような感じですね。

while (number < 5)

この場合は、"number" という変数が5未満であるときに、式の判定結果として True となるので while の中の処理をし続けます。

for 文と似ているのですが、上の式の場合は for だと "number" をインクリメントする必要がありました。でないと、コンパイルエラーになってプログラムが動かないからです。

でもこの場合には、インクリメントを必須としないので、いとも簡単に無限ループが作れてしまいます。

それでは次の処理にも進まないし、プログラムとしても終了できないので、処理側の方で終了条件を記述する必要があります。例えば上のようなコードの場合には、単純にインクリメントしてあげればループの終了条件に該当し、処理を終了します。

インクリメントの例を以下に載せておきます。

while (number < 5)
{
number++;
}

 

do-while

先ほど説明した while 文をひと工夫させたような形で、do-while という書き方があります。

do{処理}while(条件)

do-while と while の違いは、「条件によらず最初に処理をするかしないか」です。

どういうことか、具体例を見ていきましょう。

do
{
printf("number の値は、%d です。\r\n", number);
number++;
}while (number < 5);

さきほどのコードでは、"number" が5未満の時に処理を行っていましたが、この上のコードでは "number" がどんな数値でも(たとえ5でも)、ひとまず printf の処理を行います。

上のコードの実行結果は以下のようになります。

number の値は、5 です。

 

continue とbreak

前回のfor 文の記事で解説した、continue と break も使用できます。

もちろん、for の時と同じような場面で使われることも多いですが、while では意図的に無限ループを作成するのが容易なため、そのループの脱出方法として用いられることも多々あります。

簡単な例としては、以下のコードです。

while(1)
{
printf("number の値は、%d です。\r\n", number);
if (number == 5) break;
number = 1;
printf("number の値は、%d です。\r\n", number);
}

このコードでは、"number" が5の場合のみ無限ループを脱出できます。それ以外の場合は、"number" が1に上書きされて printf の無限ループです(笑)。

"number" が5の場合の実行結果は以下の通りです。

number の値は、5 です。

おわかりの通り「number の値は、1 です。」という文字列が出力されません。

 

for との差別化

ループは for もあるから何個も不要じゃないの?と思った方もいると思います。しかし、while 文には用いるべき特有の場合があるのです。

それは、結論から言うとファイル等のデータの読み込みです。例えばCSVファイル(comma-separated-values)を読み込む時に、全部で何行あるかわからないですよね。何行か数えて、for 文の条件値に設定して...とやっているとファイル毎に対応しなくてはいけず、スマートではありません。

そこで while を用いれば、ファイルを1行ずつ読み込みをしながら処理をしてくれて、ファイルの最終行の読み込みが完了し、これ以上読み込むものが無くなった時点でループ処理を抜けてくれるのです。

なので、10行のCSVファイルがこようと、300行のCSVファイルがこようと、プログラム(コード)の内容を一切変えずに処理することが可能です。

まあ、ファイルじゃなくて単純なループ処理なんだよなあ、という場合にはどっちでも処理可能だと思うので、好きな方を使用してください(笑)。

あと、無限ループを実行してしまい、コンソール画面が永遠に動いている時は、「Ctrl + C」 で停止できるので、落ち着いて対処してくださいね。

私は初めて無限ループをやってしまった時は、コンソールを強制終了させてました...。

 

続きはこちら↓