คำสั่ง break และ continue

28 June 2021

ในบทนี้ คุณจะได้เรียนรู้การใช้งานคำสั่ง break และ continue ในภาษา C เพื่อควบคุมการทำงานของลูปให้ทำงานนอกเหนือจากการทำงานปกติ ซึ่งมันสามารถใช้ได้กับลูปทุกประเภท เช่น for loop, while loop หรือ do-while loop เป็นต้น นี่เป็นเนื้อหาในบทนี้

  • การใช้งานคำสั่ง break
  • คำสั่ง break การค้นหาชื่อในอาเรย์
  • การใช้งานคำสั่ง continue
  • คำสั่ง continue กับ while loop
  • เปรียบเทียบคำสั่ง break และ continue

การใช้งานคำสั่ง break

คำสั่ง break เป็นคำสั่งที่ใช้เพื่อควบคุมลูปให้จบการทำงานในทันที โดยที่ไม่สนใจว่าเงื่อนไขจะยังคงเป็นจริงอยู่หรือไม่ เรามักใช้มันร่วมกับคำสั่ง if เพื่อตรวจสอบเงื่อนไขก่อน เช่น ถ้าหากเงื่อนไขบางอย่างเป็นจริง เราเรียกใช้คำสั่ง break เพื่อจบการทำงานของลูป เป็นต้น

มาเริ่มต้นกับตัวอย่างแรกสำหรับการใช้งานคำสั่ง break ในภาษา C เพื่อควบคุมการทำงานของลูป นี่เป็นโปรแกรมนับตัวเลขจาก 1-10 และแสดงตัวเลขที่นับได้ออกทางหน้าจอด้วยการใช้งานคำสั่ง for loop

break_example.c
#include <stdio.h>

int main()
{
    for (int i = 1; i <= 10; i++) {
        if (i == 6) {
            break;
        }
        printf("%d ", i);
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

1 2 3 4 5

ในตัวอย่างนี้ เราได้เขียนโปรแกรมเพื่อนับเลขจาก 1-10 โดยการใช้คำสั่งวนซ้ำ for loop และอย่างที่คุณเห็นว่าตัวเลขที่นับและแสดงออกมานั้นมีเพียง 1-5 เท่านั้น เรามาดูกันว่าทำไมจึงเป็นเช่นนั้น

if (i == 6) {
    break;
}

นั่นเป็นเพราะว่าเมื่อค่าในตัวแปร i มีค่าเท่ากับ 6 เราได้ใช้งานคำสั่ง break เพื่อจบการทำงานของลูป ซึ่งนี่จะส่งผลให้ลูปจบการทำงานในทันทีโดยที่ไม่สนใจว่าเงื่อนไข i <= 10 จะยังคงเป็นจริงอยู่หรือไม่ และนี่เป็นวิธีที่คำสั่ง break ทำงาน

คำสั่ง break การค้นหาชื่อในอาเรย์

มาดูอีกตัวอย่างสำหรับการใช้งานคำสั่ง break ในตัวอย่างนี้ เป็นโปรแกรมสำหรับค้นหาชื่อในอาเรย์ที่มีรายชื่อที่จัดเตรียมเอาไว้แล้ว โดยรับค่าชื่อที่ต้องการค้นหามาจากคีย์บอร์ด นี่เป็นตัวอย่างของโปรแกรม

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

int main()
{
    char names[][10] = {
        "Christ", "John", "Harry",
        "Alex", "Ethan", "George"
    };

    char s[10];
    printf("Enter name to search: ");
    scanf("%s", s);

    int found = -1;
    for (int i = 0; i < 6; i++) {
        if (strcmpi(s, names[i]) == 0) {
            found = i;
            break;
        }
    }

    if (found != -1) {
        printf("Found \"%s\" at index %d\n", s, found);
    } else {
        printf("\"%s\" not found in the array\n", s);
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เมื่อกรอกชื่อที่ต้องการค้นหาเป็น "Harry"

Enter name to search: Harry
Found "Harry" at index 2

จากนั้นรันโปรแกรมอีกครั้งและกรอกชื่อที่ต้องการค้นหาเป็น "Oliver" ซึ่งชื่อนี้ไม่มีอยู่ในอาเรย์

Enter name to search: Oliver
"Oliver" not found in the array

เมื่อชื่อที่กรอกเข้ามาเพื่อค้นหานั้นมีอยู่ในอาเรย์ โปรแกรมจะบอกว่ามันพบกับชื่อดังกล่าวพร้อมกับ Index ที่ชื่อนั้นอยู่ในอาเรย์ และบอกว่าไม่พบ ในกรณีที่ชื่ิอที่กรอกเข้ามานั้นไม่ปรากฎอยู่ในอาเรย์เหมือนกับการรันโปรแกรมครั้งที่สอง

int found = -1;

เริ่มต้นเราประกาศตัวแปร found ที่มีค่าเริ่มต้นเป็น -1 นี่เป็นตัวแปรที่จะใช้เก็บ Index ของชื่อในอาเรย์เมื่อการค้นหาถูกพบ ในการค้นหาค่าในอาเรย์ เราจะต้องนำค่าที่ต้องการค้นหาไปตรวจสอบกับรายชื่อทั้งหมดในอาเรย์ทีละค่า

for (int i = 0; i < 6; i++) {
    if (strcmpi(s, names[i]) == 0) {
        found = i;
        break;
    }
}

ดังนั้นเราใช้คำสัง for loop เพื่อวนเปรียบเทียบชื่อในอาเรย์จากตัวแรกไปยังตัวสุดท้าย ฟังก์ชัน strcmpi ใช้สำหรับเปรียบเทียบ String ในภาษา C ซึ่งจะส่งค่ากลับเป็น 0 ถ้าค่าของ String ทั้งสองเท่ากัน และเราใช้คำสั่ง if เพื่อตรวจสอบเงื่อนไขว่าเป็นจริงหรือไม่

ในกรณีที่เงื่อนไขเป็นจริงหรือการค้นหาได้ถูกค้นพบ เราเก็บ Index ของชื่อที่พบไว้ในตัวแปร found และจบการทำงานของลูปด้วยคำสั่ง break ในทันที

break;

เราจบการทำงานของลูปในทันทีเมื่อการค้นหาถูกค้นพบ นั่นเป็นเพราะว่าเราได้สิ่งที่ต้องการแล้ว ดังนั้นเมื่อค้นพบ "Harry" ในตำแหน่ง Index ที่ 2 ของอาเรย์ ก็ไม่จำเป็นต้องค้นหามันในตำแหน่งที่เหลืออีกต่อไป

ลองจินตนาการว่ามี 1,000 รายชิื่อที่ถูกเก็บไว้ในอาเรย์ และชื่อที่ต้องการค้นหาจะปรากฏอยู่ตำแหน่งที่ 10 ของอาเรย์ เมื่อพบและหยุดการค้นหาที่ตำแหน่งนี้ จะทำให้ไม่จำเป็นต้องค้นหาอีก 990 รายชื่อที่เหลือ ซึ่งสามารถลดเวลาการทำงานของโปรแกรมได้

นอกจากนี้ คุณยังสามารถใช้งานคำสั่ง break ร่วมกับลูปประเภทอื่นๆ ในภาษา C ได้ เช่น while loop หรือ do-while loop ได้ เพียงแค่ใส่มันในเงื่อนไขหรือเรียกมันได้ทุกที่เมื่อต้องการให้ลูปจบการทำงาน

การใช้งานคำสั่ง continue

คำสั่ง continue ใช้สำหรับควบคุมเพื่อข้ามการทำงานของลูปในรอบปัจจุบันไปยังรอบใหม่ในทันที โดยที่โปรแกรมจะข้ามคำสั่งที่ปรากฏหลังจากคำสั่ง continue ทั้งหมด; ไม่เหมือนกับคำสั่ง break คำสั่ง continue ยังคงทำงานในลูปในขณะที่เงื่อนไขเป็นจริงตามปกติ

เราจะมาเริ่มตัวอย่างการใช้งานคำสั่ง continue ในภาษา C สำหรับการนับตัวเลขจาก 1-10 เช่นเดิมเหมือนกับตัวอย่างที่ผ่านมา แต่คุณจะได้เห็นความแตกต่างของมันในตัวอย่างนี้ นี่เป็นตัวอย่าง

continue_example.c
#include <stdio.h>

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

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

2 4 6 8 10

ในตัวอย่างนี้ เราใช้คำสั่ง for loop เพื่อวนแสดงตัวเลขจาก 1-10 แต่ผลลัพธ์จากการทำงานของโปรแกรมนั้นแสดงเพียงเลขคู่เท่านั้น และนี่ถูกต้องเนื่องจากเราสั่งให้มันทำโดยการใช้งานคำสั่ง continue เพื่อให้ข้ามการทำงานของลูป

if (i % 2 == 1) {
    continue;
}

ภายในลูปเราใช้คำสั่ง if เพื่อตรวจสอบว่าตัวเลขเป็นจำนวนคี่หรือไม่โดยการหาเอาเศษด้วย 2 เมื่อเศษเหลือเท่ากับ 1 นั่นหมายความว่าตัวเลขเป็นจำนวนคี่ ดังนั้นเราเรียกใช้คำสั่ง continue เพื่อข้ามการทำงานไปยังรอบถัดไป

printf("%d ", i);

เมื่อพบกับคำสั่ง continue โปรแกรมข้ามการทำงานคำสั่งที่เหลิือในลูปหลังจากนั้นทั้งหมด นั่นส่งผลให้การแสดงผลเมื่อตัวเลขเป็นจำนวนคี่ไม่ทำงาน และโปรแกรมทำงานในรอบถัดไปในทันที นั่นเป็นเหตุผลว่าทำไมมีเพียงเลขจำนวนคู่ที่ถูกแสดงออกทางหน้าจอ

และนี่เป็นวิธีการทำงานของคำสั่ง continue ในภาษา C

คำสั่ง continue กับ while loop

เมื่อใช้คำสั่ง continue ร่วมกับคำสั่ง for loop การอัพเดทค่าของลูป (i++) จะยังคงทำงานอัตโนมัติ นั่นเป็นเพราะว่าส่วนอัพเดทค่าของคำสั่ง for ถูกออกแบบมาให้ทำงานเสมอเมื่อจบลูป แม้ว่ามันจะเป็นการจบลูปแบบข้ามด้วยคำสั่ง continue ก็ตาม

แต่นี่จะเปลี่ยนไปเมื่อใช้ร่วมกับคำสั่ง while loop หรือ do-while loop ในกรณีที่ลูปมีตัวนับ คุณจะต้องควบคุมมันด้วยตัวเองเมื่อใช้คำสั่ง continue กับลูปเหล่านี้ เนื่องจากมันไม่มีส่วนอัพเดทอัตโนมัติเหมือนกับคำสั่ง for loop

ตัวอย่างนีึ้ เป็นโปรแกรมแสดงตัวเลขคู่จาก 1-10 เหมือนกับในตัวอย่างที่ผ่านมา แต่เราเขียนมันด้วยคำสั่ง while loop ที่มีการใช้งานคำสั่ง continue สำหรับควบคุมการทำงานของลูปแทน

continue_with_while.c
#include <stdio.h>

int main()
{
    int i = 1;
    while (i <= 10) {
        if (i % 2 == 1) {
            i++;
            continue;
        }
        printf("%d ", i);
        i++;
    }
    return 0;
}

และผลลัพธ์ของโปรแกรมเป็นเช่นเดิม

2 4 6 8 10

สิ่งที่แตกต่างกันสำหรับตัวอย่างนี้กับตัวอย่างก่อนหน้าก็คือ วิธีที่เราควบคุมการเปลี่ยนแปลงตัวนับของลูปเมื่อใช้คำสั่ง continue

printf("%d ", i);
i++;

เนื่องจากในการใช้งานคำสั่ง while loop เรามักจะอัพเดทตัวนับของลูป i++ ในตอนท้ายของลูป ในกรณีนี้คือเมื่อคำสั่งแสดงผลตัวเลขออกทางหน้าจอ แต่เมื่อเราใช้คำสัง continue มันจะข้ามการทำงานคำสั่งที่เหลือทั้งหมด รวมถึงคำสั่ง i++ ที่อยู่บรรทัดสุดท้ายของลูปด้วย

if (i % 2 == 1) {
     i++;
     continue;
}

นั่นทำให้เราต้องทำการอัพเดทค่าตัวนับของลูปก่อนเรียกใช้คำสั่ง continue ด้วยตัวเองเสมอ ไม่เช่นนั้นค่าในตัวแปร i จะไม่เปลี่ยน และนี่จะทำให้ลูปทำงานตลอดไปหรือเกิด Infinity loop ขึ้น นี่เป็นสิ่งที่คุณต้องระวังเมื่อใช้งานกับคำสั่ง while loop

เปรียบเทียบคำสั่ง break และ continue

สำหรับตัวอย่างสุดท้ายในบทนี้จะเป็นการเปรียบเทียบการใช้งานคำสั่ง break และ continue แม้ว่าที่ผ่านจะทำให้คุณสามารถเข้าใจแนวคิดและการใช้งานของคำสั่งทั้งสองแล้ว แต่การได้เห็นตัวอย่างเพิ่มเติมจะสามารถช่วยให้คุณเข้าใจมันได้ดีขึ้น

เรามาเขียนโปรแกรมเพื่อหาผลรวมของตัวเลข 10 ตัวเลขที่รับค่ามาจากทางคีย์บอร์ด และจะหยุดการหาผลรวมในทันทีเมื่อตัวเลขที่กรอกเข้ามาเป็น 0 นี่เป็นตัวอย่างของโปรแกรมที่ว่า

sum_break.c
#include <stdio.h>

int main()
{
    printf("Sum of ten numbers\n");
    printf("Enter 0 or negative values to exit early\n");

    int n;
    int sum = 0;
    int i = 0;
    for (int i = 0; i < 10; i++) {
        printf("#%d: ", i + 1);
        scanf("%d", &n);
        if (n <= 0) {
            break;
        }
        sum += n;
    }

    printf("Sum = %d\n", sum);
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Summation of ten numbers
Enter 0 or negative values to exit early
#1: 11
#2: 3
#3: 5
#4: 12
#5: 18
#6: 0
Sum = 49

ในตัวอย่างนี้ เป็นโปรแกรมสำหรับหาผลรวมของตัวเลข (อย่างมากที่สุด) 10 ตัวโดยใช้คำสั่ง for loop เพื่อวนรับค่าตัวเลข 10 รอบจากทางคีย์บอร์ด แต่โปรแกรมมีเงื่อนไขพิเศษอยู่ก็คือเมื่อค่าที่รับมาเท่ากับหรือน้อยกว่า 0

if (n <= 0) {
    break;
}

และถ้าหากเงื่อนไขเป็นจริง เราเรียกใช้คำสั่ง break เพื่อจบการทำงานของลูป นั่นหมายความว่าโปรแกรมก็จะยังคงทำงานสูงสุดตามเงื่อนไขของมัน ในกรณีที่ตัวเลขที่กรอกเข้ามาไม่ทำให้เกิดการ break ขึ้นเลย

ต่อไปมาดูอีกเวอร์ชันหนึ่งของโปรแกรมหาผลรวมนี้ แต่กับคำสั่ง continue แทน ในตัวอย่างนี้ เป็นโปรแกรมสำหรับหาผลรวมของตัวเลข 10 ตัวเช่นเดิม แต่สิ่งที่แตกต่างกันคือเมื่อค่าที่กรอกเข้ามาน้อยกว่าหรือเท่ากับ 0 ผู้ใช้จะต้องกรอกค่าใหม่จนกว่าจะถูกต้องเพื่อนำมาหาผลรวม

นั่นหมายความว่าโปรแกรมต้องการรับค่า 10 ตัวเลขที่เป็นจำนวนเต็มบวกเพื่อนำมาหาผลรวม และเราใช้คำสั่ง continue เพื่อยืนยันว่าจะได้รับมันทั้งหมด นี่เป็นอย่างของโปรแกรมและเราเปลี่ยนการทำงานของลูปเป็น while loop แทน

sum_continue.c
#include <stdio.h>

int main()
{
    printf("Summation of ten numbers\n");
    printf("Enter 0 or negative values will be rejected\n");

    int n;
    int sum = 0;
    int i = 0;
    while (i < 10) {
        printf("#%d: ", i + 1);
        scanf("%d", &n);
        if (n <= 0) {
            printf("Invalid value try again\n");
            continue;
        }
        sum += n;
        i++;
    }

    printf("Sum = %d\n", sum);
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Summation of ten numbers
Enter 0 or negative values will be rejected
#1: 20
#2: 3
#3: 15
#4: 0
Invalid value try again
#4: 13
#5: 10
#6: 7
#7: -5
Invalid value try again
#7: -10
Invalid value try again
#7: 10
#8: 12
#9: 12
#10: 13
Sum = 115

นี่เป็นโปรแกรมสำหรับหาผลรวมของ 10 ตัวเลขที่จะถูกรับมาจากทางคีย์บอร์ด โปรแกรมเริ่มต้นจากคำสั่ง while loop ที่จะทำงานในขณะที่เงื่อนไขในตัวแปร i น้อยกว่า 10 ซึ่งมันใช้สำหรับนับว่าตัวเลขที่รับมาได้เป็นจำนวนกี่ตัวแล้ว

if (n <= 0) {
    printf("Invalid value try again\n");
    continue;
}

นี่เป็นการสร้างเงื่อนไขสำหรับตรวจสอบค่าที่รับเข้ามา ถ้าหากค่าในตัวแปร n น้อยกว่าหรือเท่ากับ 10 เราเรียกใช้คำสั่ง continue เพื่อข้ามการทำงานของลูปไปเพื่อให้รับค่าใหม่อีกครั้ง สังเกตว่าเราไม่ได้เพิ่มค่าในตัวแปร i ก่อนเรียกใช้งานคำสั่ง continue นี่เป็นความตั้งใจ เนื่องจากเราไม่ต้องการให้มันนับเมื่อค่าที่กรอกเข้ามาไม่ถูกต้อง

นี่เป็นการยืนยันว่าเราจะได้รับ 10 ตัวเลขจำนวนเต็มบวกเพื่อนำมาหาผลรวมเสมอ และถ้าหากตัวเลขที่กรอกเข้ามาไม่ถูกต้อง ก็จะต้องกรอกใหม่จนกว่าจะถูกต้องนั่นเอง

เมื่อคุณลองรันโปรแกรมและพบว่ามันใช้งานได้โอเคแล้ว จากนั้นลองเปลี่ยนการทำงานในบล็อคของคำสั่ง if ให้เหมือนกับโค้ดด้านล่างนี้และรันโปรแกรมใหม่อีกครั้ง

if (n <= 0) {
    printf("Invalid value, skipped\n");
    i++;
    continue;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Summation of ten numbers
Enter 0 or negative values will be skipped
#1: 10
#2: 11
#3: 6
#4: 0
Invalid value, skipped
#5: 13
#6: 4
#7: 16
#8: -5
Invalid value, skipped
#9: 15
#10: 2
Sum = 77

สิ่งที่เปลี่ยนแปลงไปในตัวอย่างนี้คือ ถ้าค่าที่รับมาน้อยกว่าหรือเท่ากับ 0 โปรแกรมจะข้ามการนำค่าดังกล่าวในการนำไปหาผลรวม นั่นหมายความว่าการรับค่าจะเกิดขึ้น 10 ครั้งเสมอ แต่บางค่าอาจถูกข้ามไปเมื่อมันไม่ถูกต้อง

ในบทนี้ คุณได้เรียนรู้การใช้งานคำสั่ง break และ continue ในภาษา C เพื่อควบคุมการทำงานของลูปซึ่งสามารถใช้ได้กับลูปทุกประเภท และเราได้แสดงตัวอย่างการประยุกต์ใช้ในรูปแบบต่างๆ พร้อมเปรียบเทียบการใช้งานคำสั่งทั้งสอง

บทความนี้เป็นประโยชน์หรือไม่? Yes · No