continueを使って「処理をスキップする」プログラム
今回は、C#の continue を使って、条件に合わない入力をスキップするプログラムを作ります。
前回は、while(true) と break を使って、0が入力されるまで加算するプログラムを作りました。
今回は、そこに continue を加えて、次のようなルールにします。
0が入力されたら終了する
正の数なら合計に加える
負の数なら合計に加えず、もう一度入力に戻る
continueとは何か
continue は、繰り返し処理の中で使う命令です。
意味は、今回の繰り返し処理をここで終わりにして、次の繰り返しへ進むです。
break と似ていますが、役割は違います。
break 繰り返しそのものを終了する
continue 今回だけスキップして、次の繰り返しへ進む
つまり、break は「もう終わり」、continue は「今回は飛ばす」です。
作りたいプログラム
今回作るプログラムは、次のような動きをします。
数値を入力してください
10
現在の合計は10です
数値を入力してください
-5
負の数は合計に加えません
数値を入力してください
20
現在の合計は30です
数値を入力してください
0
終了します
最終的な合計は30です
-5 は負の数なので、合計には加えません。
その後、プログラムは終了せず、もう一度入力に戻ります。
プロジェクト名について
今回のプロジェクト名は、次のようにしましょう。
namespace SumPositiveUntilZero
Sum は「合計する」、Positive は「正の数」、Until Zero は「0まで」という意味です。
つまり、SumPositiveUntilZero は、0が入力されるまで、正の数だけを合計するという意味になります。
サンプルコード
using System;
namespace SumPositiveUntilZero
{
internal class Program
{
static void Main(string[] args)
{
// 合計を入れておく変数
var total = 0;
while (true) // ずっと繰り返す
{
Console.WriteLine("数値を入力してください");
// キーボードから入力された文字を受け取る
var line = Console.ReadLine();
// 入力された文字を整数に変換する
var number = int.Parse(line);
// 0が入力されたら、繰り返しを終了する
if (number == 0)
{
Console.WriteLine("終了します");
break; // while文を抜ける
}
// 負の数が入力されたら、合計に加えず次の繰り返しへ進む
if (number < 0)
{
Console.WriteLine("負の数は合計に加えません");
Console.WriteLine();
continue; // この下の処理を飛ばして、次の繰り返しへ進む
}
// ここに来るのは、正の数が入力されたときだけ
total += number;
// 現在の合計を表示する
Console.WriteLine($"現在の合計は{total}です");
Console.WriteLine();
}
// while文が終わった後に、最終的な合計を表示する
Console.WriteLine($"最終的な合計は{total}です");
}
}
}

while(true)の意味
while(true) は、条件が常に true なので、基本的にはずっと繰り返します。
while (true)
{
// ずっと繰り返す
}
そのため、while(true) を使うときは、どこかで繰り返しを止める処理が必要です。
今回のプログラムでは、0が入力されたときに break を使って終了しています。
if (number == 0)
{
Console.WriteLine("終了します");
break;
}
つまり、今回のプログラムは次のような考え方です。
基本的にはずっと入力を受け付ける
0が入力されたら終了する
負の数が入力されたらスキップする
正の数が入力されたら合計に加える
continueが実行される場所
今回、continue は次の場所にあります。
if (number < 0)
{
Console.WriteLine("負の数は合計に加えません");
Console.WriteLine();
continue;
}
これは、入力された数値が負の数だった場合の処理です。
たとえば、-5 が入力されたとします。
すると、次の条件が成り立ちます。
number < 0
そのため、if 文の中に入ります。
そして、次のメッセージを表示します。
負の数は合計に加えません
その後、continue が実行されます。
continue が実行されると、その下にある処理は実行されません。
total += number;
Console.WriteLine($"現在の合計は{total}です");
つまり、負の数は合計に加えられません。
total += number の意味
次のコードは、入力された数値を合計に加えています。
total += number;
これは、次の書き方と同じ意味です。
total = total + number;
たとえば、現在の total が10で、number が20なら、次のようになります。
total = 10 + 20
その結果、total は30になります。
今回のプログラムでは、continue によって負の数はここまで来ません。
そのため、total += number; が実行されるのは、正の数が入力されたときだけです。
処理の流れ
今回の処理の流れは、次のようになります。
合計 total を0にする
↓
数値を入力する
↓
入力された数値が0か確認する
↓
0なら終了する
↓
入力された数値が負の数か確認する
↓
負の数なら合計に加えず、次の繰り返しへ進む
↓
正の数なら合計に加える
↓
現在の合計を表示する
↓
もう一度、数値を入力する
ポイントは、負の数が入力されたときです。
負の数が入力された場合は、continue によって、合計に加える処理を飛ばします。
breakとcontinueの違い
break と continue は、どちらも繰り返し処理の中でよく使われます。
ただし、意味は違います。
break
繰り返しを完全に終了する
continue
今回の繰り返しだけをスキップして、次の繰り返しへ進む
今回のプログラムでは、次のように使い分けています。
if (number == 0)
{
break;
}
0が入力されたときは、もう入力を続ける必要がないので break します。
一方で、負の数が入力されたときは、プログラムを終了するわけではありません。
if (number < 0)
{
continue;
}
負の数は合計に加えたくないだけなので、continue で今回だけスキップします。
continueを使わない場合
実は、今回のプログラムは continue を使わなくても書けます。
たとえば、次のように書くこともできます。
if (number >= 0)
{
total += number;
Console.WriteLine($"現在の合計は{total}です");
}
else
{
Console.WriteLine("負の数は合計に加えません");
}
この書き方でも動きます。
ただし、条件が増えてくると、if 文の中が深くなり、読みにくくなることがあります。
そのようなときに continue を使うと、
この条件のときは、ここで処理を飛ばす
と書けるので、流れが分かりやすくなることがあります。
初学者がつまずきやすいポイント
continue を使うときは、continueより下の処理は実行されないことに注意しましょう。
今回であれば、負の数が入力されたとき、次の処理は実行されません。
total += number;
Console.WriteLine($"現在の合計は{total}です");
そのため、負の数は合計に加わりません。
また、while(true) の中で continue を使う場合は、終了条件である break を忘れないようにしましょう。
もし break がなければ、ずっと入力を繰り返すプログラムになってしまいます。
もう1つの注意点は、今回のコードでは、数値以外を入力するとエラーになることです。
たとえば、abc のような文字を入力すると、int.Parse で整数に変換できないため、エラーになります。
最初の学習では、まずは「数値だけを入力する」と決めて練習すれば大丈夫です。
まとめ
continue は、繰り返し処理の中で、今回の処理だけをスキップする命令です。
今回のプログラムでは、次の流れを作りました。
0なら break で終了
負の数なら continue でスキップ
正の数なら合計に加える
break は「繰り返しを終わる」、continue は「今回だけ飛ばす」と覚えると分かりやすいです。
while(true)、break、continue を組み合わせると、入力を繰り返すプログラムを柔軟に作れるようになります。
まずは今回のように、0で終了、負の数はスキップ、正の数だけ合計というシンプルな例で慣れていきましょう。








ディスカッション
コメント一覧
まだ、コメントがありません