C言語初心者必見!next文の使い方と応用10選 – Japanシーモア

C言語初心者必見!next文の使い方と応用10選

C言語初心者向けのnext文の使い方と応用について詳しく解説した記事のサムネイルC言語
この記事は約21分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

プログラミングの世界は広大で、その中には数多くのコマンドや文法が存在します。

特にC言語においては、その強力な機能性と高い自由度から、幅広い領域で活用されています。

その中でも今回注目するのが、「next文」です。

●C言語とは

C言語は、1970年代に開発されたプログラミング言語で、その高い汎用性と効率性から多くのシステム開発に使われています。

C言語を理解することで、他の多くのプログラミング言語の理解も深まります。

●C言語のnext文の基本

○next文とは

next文はC言語の制御文の一つで、ループの中で実行される文の途中から次のループに移行するときに使用します。

next文はプログラムの流れを制御し、特定の条件下でコードの一部をスキップするために使われます。

○next文の使い方

基本的なnext文の使い方は次の通りです。

for (初期化式; 条件式; 増分式){
    処理;
    if (条件式){
        next;
    }
    処理;
}

この例では、next文が含まれるif文の条件式が成り立つ場合、その後の処理をスキップして次のループに移行します。

●next文の詳細な使い方とサンプルコード

次に、具体的なサンプルコードを用いて、next文の詳細な使い方を見ていきましょう。

○サンプルコード1:next文の基本的な使用法

ここでは、0から9までの数値を出力するループを作成します。

ただし、数字が5の時だけ出力をスキップします。

#include <stdio.h>

int main() {
    int i;
    for (i = 0; i < 10; i++) {
        if (i == 5) {
            continue;
        }
        printf("%d\n", i);
    }
    return 0;
}

このコードでは、for文を使って0から9までの数を順に出力しています。

ただし、iが5の時だけ、「continue」文(C言語のnext文に相当)を用いてその数の出力をスキップしています。

この結果、0から4、そして6から9までが出力され、5だけが出力されません。

これがnext文(C言語では「continue」文)の基本的な使用法です。

○サンプルコード2:next文を使ったループ処理

このサンプルコードでは、next文を用いてループ処理を行う方法を表しています。

具体的には、10回のループ処理の中で、特定の条件に一致する場合にnext文を使ってその後の処理をスキップし、次のループに移行するというプログラムを作成します。

#include <stdio.h>

int main() {
    for(int i = 1; i <= 10; i++) {
        if(i % 3 == 0) {
            continue;
        }
        printf("%d\n", i);
    }
    return 0;
}

このコードでは、1から10までの数値を順に出力するループ処理を行っています。

ただし、if(i % 3 == 0)の条件式がtrue(つまり、iが3の倍数)となる場合に、continue文(C言語のnext文に相当)を使ってその後の処理をスキップし、次のループに移行しています。

そのため、出力されるのは3の倍数以外の数値、つまり1, 2, 4, 5, 7, 8, 10となります。

このコードを実行した結果は次の通りです。

1
2
4
5
7
8
10

以上の結果からわかる通り、3の倍数を除いた数値が順番に出力されています。

ループ処理中に特定の条件を満たした場合に、その後の処理をスキップして次のループに進むという処理は、実際のプログラムでは頻繁に用いられます。

たとえば、あるリストから特定の条件を満たす要素だけを取り出すといった処理などに利用できます。

この例を参考に、C言語のnext文、つまりcontinue文を使って繰り返し処理を制御することができます。

ただし、continue文を使用するとコードの流れが直感的でなくなる場合もあるため、使用は適切な範囲で行いましょう。

○サンプルコード3:next文を使った条件分岐

次に、next文を用いて条件分岐を実現する例を紹介します。

このコードでは、特定の条件を満たす場合に処理をスキップするという特性を活かしています。

#include<stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;  //「next文」に相当します。
        }
        printf("%d\n", i);
    }
    return 0;
}

このコードでは、1から10までの整数を順に出力しています。

ただし、「i == 5」のときにcontinue文(C言語でのnext文)が実行され、5が出力される処理をスキップしています。

上記コードを実行すると、次の結果が得られます。

1
2
3
4
6
7
8
9
10

見ての通り、5が抜けています。

このように、next文を使うことで特定の条件を満たす場合のみ処理をスキップすることが可能です。

つまり、それ以外の場合には通常通りの処理を進めることができます。

次に、このコードを少し工夫して、特定の条件を満たした時だけ特別な処理を行う例を見てみましょう。

これは、”if-else”構文を使うことで実現できます。

#include<stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            printf("特別な数:%d\n", i);
            continue;  //「next文」に相当します。
        }
        printf("%d\n", i);
    }
    return 0;
}

このコードでは、iが5になったときに特別なメッセージを出力してから、次のループに進むようになっています。

このように、next文はループの途中で特定の処理をスキップするだけでなく、特定の条件下で特別な処理を行った後に残りの処理をスキップするのにも使えます。

このコードを実行すると、次のような結果が出力されます。

1
2
3
4
特別な数:5
6
7
8
9
10

このように、next文は条件分岐と組み合わせることで非常に強力な制御ツールになります。

初心者の方でも理解しやすいように、具体的なサンプルコードを通じて解説を進めています。

今後も更に深い部分へと進んでいきましょう。

●next文の応用例とサンプルコード

さて、ここからはC言語のnext文を用いた応用的な使い方について解説していきます。

具体的なサンプルコードとともに、その活用法を学んでいきましょう。

○サンプルコード4:next文を使った高度なループ処理

次に、少々高度なループ処理についてみてみましょう。

ここでは、next文を使用して特定の条件を満たすときに、ループの中身をスキップして次のループに進む方法を解説します。

#include<stdio.h>
int main(){
    for(int i = 0; i < 10; i++){
        if(i == 5){
            continue;
        }
        printf("%d ", i);
    }
    return 0;
}

このコードでは、for文を使ってループを生成しています。

この例では0から9までを順番に出力していますが、iが5のときだけcontinue(C言語におけるnext文)を用いて出力をスキップしています。

よって、結果として出力される数値は5を除く0から9までになります。

このサンプルコードの実行結果を表します。

0 1 2 3 4 6 7 8 9

これにより、特定の条件下で一部の処理をスキップすることができることを確認できます。

ループの中で一部の処理を省略したいとき、または特定の条件下でのみ処理を行いたいときに、next文(C言語ではcontinue文)を利用することで、コードの流れをより柔軟に制御することが可能となります。

○サンプルコード5:next文を使った複雑な条件分岐

次に、next文を使用した複雑な条件分岐について考えてみましょう。

複数の条件が絡む状況でも、next文を適切に使用することで、コードの見通しを良くしながら期待する動作を得ることが可能です。

#include<stdio.h>
int main(){
    for(int i = 0; i < 10; i++){
        if(i % 2 == 0){
            continue;
        }
        printf("%d ", i);
    }
    return 0;
}

このコードでは、for文を使ってループを生成しています。

その中で、if文とcontinue(C言語におけるnext文)を組み合わせて、iが偶数であるときに出力をスキップする動作を実現しています。

その結果、奇数だけが出力されます。

このサンプルコードの実行結果を解説します。

1 3 5 7 9

このように、next文を用いることで複雑な条件を満たす要素のみを処理し、その他の要素はスキップするというような、より柔軟な制御を実現することができます。

これにより、コードの見通しを良くするだけでなく、無駄な処理を省略することでプログラムの効率も向上します。

○サンプルコード6:next文を使った配列操作

配列操作の中でも特に、配列の要素を順番に操作したいが、特定の条件を満たす要素だけはスキップしたいというケースに、next文を活用することで効率的にプログラムを作成できます。

その一例として、整数配列から偶数だけを取り出すプログラムを紹介します。

#include <stdio.h>

int main() {
    int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int i;

    for (i = 0; i < 10; i++) {
        if (numbers[i] % 2 != 0) {
            continue;
        }
        printf("%d\n", numbers[i]);
    }

    return 0;
}

このコードでは、整数型の配列numbersに10個の要素を初期化しています。

この配列の要素を一つずつ見ていき、その値が奇数の場合(つまり、2で割った余りが0でない場合)はnext文(この場合は「continue」)を使ってその後の処理をスキップし、次の要素へ進むようになっています。

その結果、偶数の値だけがprintfで表示されるようになります。

このプログラムを実行すると、配列の偶数要素だけが出力されるので、次のような結果が得られます。

2
4
6
8
10

このように、next文を使うことで特定の条件を満たす要素だけを操作する、あるいは特定の要素だけをスキップする、といった配列操作を効率的に実装できます。

なお、このコードは「偶数だけを取り出す」プログラムですが、これを応用して「特定の値を持つ要素だけを取り出す」「特定の範囲の値を持つ要素だけを取り出す」といったプログラムも作成することができます。

このように、next文は配列操作の中でも非常に広範に使うことができるため、その使い方と適用例をしっかりと理解しておくと、様々な場面で役立つでしょう。

次に、配列操作でよく使われる「配列の要素の合計値を計算する」例も見てみましょう。

ただし、ここでは「特定の条件を満たす要素の合計値だけを計算する」という応用例を考えてみます。

その一例として、10未満の値を持つ要素の合計値だけを計算するプログラムを紹介します。

#include <stdio.h>

int main() {
    int numbers[] = {1, 2, 3, 4, 15, 6, 7, 8, 30, 10};
    int i;
    int sum = 0;

    for (i = 0; i < 10; i++) {
        if (numbers[i] >= 10) {
            continue;
        }
        sum += numbers[i];
    }

    printf("Sum: %d\n", sum);

    return 0;
}

このコードでは、配列の要素を一つずつ見ていき、その値が10以上の場合はnext文(この場合は「continue」)を使ってその後の処理をスキップし、次の要素へ進むようになっています。

その結果、10未満の値だけが合計に加算されるようになります。

このプログラムを実行すると、配列の中から10未満の要素の合計値だけが出力されます。

具体的には、次のような結果が得られます。

Sum: 31

以上、next文を使った配列操作の基本的な例とその応用例をご紹介しました。

特定の条件を満たす要素だけを操作する、または特定の条件を満たす要素をスキップするといった柔軟な配列操作を実装するために、next文の使い方を理解しておくと非常に便利です。

○サンプルコード7:next文を使ったファイル操作

今度は、next文を使ってファイル操作をしてみましょう。

ファイルを扱う時、一行ずつ読み込んで何かの処理をするケースが多いですよね。

その際、特定の条件を満たす行だけをスキップしたいという場合にnext文を活用できます。

下記のコードは、テキストファイルを一行ずつ読み込み、各行の文字数が10文字以下の場合のみを出力するサンプルです。

#include <stdio.h>

int main() {
    FILE *fp;
    char line[256];

    fp = fopen("sample.txt", "r");
    if(fp == NULL) {
        printf("ファイルが開けませんでした。\n");
        return 1;
    }

    while(fgets(line, 256, fp) != NULL) {
        if(strlen(line) > 10) {
            continue;
        }
        printf("%s", line);
    }

    fclose(fp);

    return 0;
}

このコードでは、まずfopen関数でテキストファイルを読み込みモードで開いています。

そして、fgets関数を使ってファイルの内容を一行ずつ読み込みます。

その際、読み込んだ行の文字数が10文字より多い場合、continue(C言語におけるnext文)を使ってその後の処理をスキップし、次の行の読み込みに移ります。

これにより、出力されるのは10文字以下の行のみとなります。

このコードを実行すると、”sample.txt”ファイルの中に含まれる10文字以下の行だけが出力されます。

文字数が10を超える行はスキップされ、表示されません。

こうした形で、next文を使って条件に合致する行だけをスキップすることができます。

次に、このコードを応用し、特定のキーワードが含まれる行をスキップするように改良してみましょう。

#include <stdio.h>
#include <string.h>

int main() {
    FILE *fp;
    char line[256];

    fp = fopen("sample.txt", "r");
    if(fp == NULL) {
        printf("ファイルが開けませんでした。\n");
        return 1;
    }

    while(fgets(line, 256, fp) != NULL) {
        if(strstr(line, "特定のキーワード") != NULL) {
            continue;
        }
        printf("%s", line);
    }

    fclose(fp);

    return 0;
}

このコードでは、strstr関数を使って行内に”特定のキーワード”が含まれているかどうかを判定しています。

含まれている場合、continue(C言語におけるnext文)でその行の出力をスキップし、次の行の読み込みに移ります。

このコードを実行すると、”sample.txt”ファイルの中に含まれる”特定のキーワード”を含まない行だけが出力されます。

“特定のキーワード”を含む行はスキップされ、表示されません。

こうした形で、next文を使って条件に合致する行だけをスキップすることができます。

○サンプルコード8:next文を使った関数の作成

ここでは、next文を利用して関数内の処理を制御する方法について説明します。

特定の条件を満たす場合に、関数内の処理を途中で終了し、次の処理に移るための使い方です。

関数内でnext文を使う基本的なサンプルコードを紹介します。

#include <stdio.h>

void checkNum(int num) {
    for (int i = 2; i < num; i++) {
        if (num % i == 0) {
            printf("%dは素数ではありません。\n", num);
            return; // nextのように処理を終了
        }
    }
    printf("%dは素数です。\n", num);
}

int main() {
    checkNum(15);
    checkNum(17);
    return 0;
}

このコードでは、checkNumという関数を作成しています。

この関数は与えられた数字が素数かどうかを判定します。

2から始まるループで、与えられた数字が割り切れる数があるかどうかをチェックします。

割り切れる数が見つかった場合は、その数は素数ではないと判定し、関数の処理を終了します。

それが「return;」文の役割です。ここで「return;」はnext文のように処理を終了しています。

実行結果は次のようになります。

15は素数ではありません。
17は素数です。

次に、上記の基本的な例を応用して、関数内でnext文を使う応用的なサンプルコードを表します。

#include <stdio.h>

void checkNumRange(int start, int end) {
    for (int num = start; num <= end; num++) {
        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                printf("%dは素数ではありません。\n", num);
                goto next_num; // nextのように処理を終了
            }
        }
        printf("%dは素数です。\n", num);
        next_num: ; // goto文のターゲット
    }
}

int main() {
    checkNumRange(10, 20);
    return 0;
}

このコードでは、checkNumRangeという関数を作成しています。

この関数は指定された範囲の数について、それぞれが素数かどうかを判定します。

内部的には、checkNum関数と同様の処理を行っていますが、範囲の各数について繰り返します。

また、「goto文」を用いて、next文のように特定の処理をスキップして次の処理に進む動作を実現しています。

実行結果は次のようになります。

10は素数ではありません。
11は素数です。
12は素数ではありません。
13は素数です。
14は素数ではありません。
15は素数ではありません。
16は素数ではありません。
17は素数です。
18は素数ではありません。
19は素数です。
20は素数ではありません。

C言語のnext文は、ある処理をスキップして次の処理に進むための役割を果たしていますが、それを関数内で利用すると、より複雑な制御を行うことが可能になります。

このように、初心者の方でもnext文をうまく使えば、効率的にコードを書くことができます。

○サンプルコード9:next文を使ったエラーハンドリング

エラーハンドリングは、プログラムが正常に動作しなかった場合に、エラーが何であるかを検出し、それを適切に対処するプロセスです。

next文は、エラーハンドリングの一部として使用することができます。

特定の条件下でエラーが発生した場合に、次のイテレーションへスキップすることにより、プログラムが停止するのを防ぐことができます。

next文を使ったエラーハンドリングのサンプルコードを紹介します。

#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            fprintf(stderr, "エラーが発生しました:iは5です\n");
            continue; // ここでnext文を使っている
        }
        printf("iの値は%dです\n", i);
    }
    return 0;
}

このコードでは、ループを使って数値iが0から9まで1ずつ増加していきます。

しかし、iが5のときにはエラーメッセージを表示し、次のループへスキップします。

そのため、”iの値は5です”という出力は表示されません。

このコードを実行すると、次の結果が得られます。

iの値は0です
iの値は1です
iの値は2です
iの値は3です
iの値は4です
エラーが発生しました:iは5です
iの値は6です
iの値は7です
iの値は8です
iの値は9です

エラーハンドリングでは、発生したエラーを検出し、そのエラーに応じた適切な対策を講じることが重要です。

上記の例では、特定の条件(iが5)でエラーを検出し、それに対する対策(ループをスキップする)を行っています。

これにより、プログラムの全体の流れが途中で停止することなく、予期せぬエラーからもプログラムを守ることができます。

○サンプルコード10:next文を使ったアルゴリズム作成

次に、アルゴリズム作成でのnext文の使用例を見てみましょう。

アルゴリズムは、問題を解決するための手順やルールを定義したものです。

next文は、特定の条件を満たすときに一部の手順をスキップするといった場面で活用できます。

next文を使ったアルゴリズム作成のサンプルコードを紹介します。

#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // ここでnext文を使っている
        }
        printf("%dは奇数です\n", i);
    }
    return 0;
}

このコードでは、数値iが0から9まで1ずつ増加していきます。

しかし、iが偶数のとき(iを2で割った余りが0のとき)は、次のループへスキップします。

そのため、”〇〇は奇数です”という出力は奇数のみに対して表示されます。

このコードを実行すると、次の結果が得られます。

1は奇数です
3は奇数です
5は奇数です
7は奇数です
9は奇数です

以上のように、next文はアルゴリズムを作成する際にも有用なツールとなります。

特定の条件を満たすデータのみを対象に処理を行いたい場合などに、next文を使ってループの一部をスキップすることで、効率的にコードを書くことが可能になります。

●next文の詳細な注意点と対処法

next文は便利な一方で、適切に使わないと意図しない動作を引き起こす可能性があります。

注意点としては、例えば次のような場面が考えられます。

一つ目は、無限ループを引き起こす可能性です。

next文はループの途中で次のイテレーションに移るため、ループの終了条件が満たされない場合にはループが無限に続く可能性があります。

二つ目は、ループ内で重要な処理をスキップしてしまう可能性です。

next文によってループの一部がスキップされるため、その部分に重要な処理が含まれているとその処理が行われなくなります。

これらの問題を避けるためには、next文の使用場所と条件を慎重に選ぶことが重要です。

無限ループを防ぐためには、ループの終了条件が必ずいずれは満たされることを確認しましょう。

また、重要な処理をスキップしないように

するためには、next文を使う前にその後の処理がスキップされても問題ないかを確認することが必要です。

●next文の詳細なカスタマイズ方法

next文はその性質上、カスタマイズの範囲は比較的限定的です。

しかし、条件分岐を工夫することで、さまざまなシチュエーションでnext文を活用することができます。

たとえば、特定の条件を満たす要素が出現した場合にのみ処理をスキップしたいという場合、その条件をif文内に記述することで、特定の状況下でのみnext文を適用することが可能になります。

また、next文は複数のループが入れ子になっている場合、一番内側のループにのみ作用します。

外側のループに対してnext文を適用したい場合は、一つのループを関数化し、その関数内でnext文を使用するという方法もあります。

まとめ

本記事では、C言語におけるnext文の使用方法と応用例、注意点、カスタマイズ方法を詳細に解説しました。

next文はループ処理を制御する上で非常に便利な機能であり、様々な場面で活用することができます。

ただし、next文を使用する際には、適切な使用場所と条件を慎重に選ぶことが重要です。

無限ループを引き起こしたり、重要な処理をスキップしたりしないように注意しましょう。

これらの知識を活用し、更に効率的なプログラミングを行ってください。

C言語におけるプログラミングスキルの向上に役立てていただければ幸いです。