C蚀語初心者必芋next文の䜿い方ず応甚10遞

C蚀語初心者向けのnext文の䜿い方ず応甚に぀いお詳しく解説した蚘事のサムネむルC蚀語

 

【圓サむトはコヌドのコピペ・商甚利甚OKです】

このサヌビスはASPや、個別のマヌチャント(䌁業)による協力の䞋、運営されおいたす。

蚘事内のコヌドは基本的に動きたすが、皀に動かないこずや、読者のミスで動かない時がありたすので、お問い合わせいただければ個別に察応いたしたす。

この蚘事では、プログラムの基瀎知識を前提に話を進めおいたす。

説明のためのコヌドや、サンプルコヌドもありたすので、もちろん初心者でも理解できるように衚珟しおありたす。

基本的な知識があればカスタムコヌドを䜿っお機胜远加、目的を達成できるように䜜っおありたす。

※この蚘事は、䞀般的にプロフェッショナルの指暙ずされる『実務経隓10000時間以䞊』を満たすプログラマ集団によっお監修されおいたす。

はじめに

プログラミングの䞖界は広倧で、その䞭には数倚くのコマンドや文法が存圚したす。

特に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蚀語におけるプログラミングスキルの向䞊に圹立おおいただければ幞いです。