ในบทนี้ นักเรียนจะได้เรียนรู้การใช้งานคำสั่ง 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
#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 ในตัวอย่างนี้ เป็นโปรแกรมสำหรับค้นหาชื่อในอาเรย์ที่มีรายชื่อที่จัดเตรียมเอาไว้แล้ว โดยรับค่าชื่อที่ต้องการค้นหามาจากคีย์บอร์ด นี่เป็นตัวอย่างของโปรแกรม
#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 เช่นเดิมเหมือนกับตัวอย่างที่ผ่านมา แต่นักเรียนจะได้เห็นความแตกต่างของมันในตัวอย่างนี้ นี่เป็นตัวอย่าง
#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 สำหรับควบคุมการทำงานของลูปแทน
#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 นี่เป็นตัวอย่างของโปรแกรมที่ว่า
#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 แทน
#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 เพื่อควบคุมการทำงานของลูปซึ่งสามารถใช้ได้กับลูปทุกประเภท และเราได้แสดงตัวอย่างการประยุกต์ใช้ในรูปแบบต่างๆ พร้อมเปรียบเทียบการใช้งานคำสั่งทั้งสอง