1. บทนำ
ความสำคัญของการวนซ้ำในภาษา C
ในการเขียนโปรแกรม การทำงานซ้ำ ๆ หรือ “ลูป” ถือว่าสำคัญมาก ในภาษา C จะมีการใช้คำสั่ง for
, while
และหัวข้อหลักในบทความนี้อย่าง do while
สำหรับการวนซ้ำ บทความนี้จะเน้นที่ do while
อธิบายตั้งแต่วิธีใช้งานพื้นฐานไปจนถึงตัวอย่างจริง
2. พื้นฐานของ do while
ไวยากรณ์พื้นฐานของ do while
do while
จะรับประกันว่าคำสั่งในลูปจะถูกดำเนินการอย่างน้อยหนึ่งครั้ง ไวยากรณ์เป็นดังนี้
do {
// คำสั่งที่ต้องการให้ทำ
} while (เงื่อนไข);
ในโครงสร้างนี้ โค้ดใน do
จะถูกรันก่อน จากนั้นจะตรวจสอบเงื่อนไข ถ้าเงื่อนไข true
ก็จะวนซ้ำอีกครั้ง ถ้าเป็น false
ก็จะออกจากลูป
ความแตกต่างระหว่าง while
และ do while
สำหรับ while
เงื่อนไขจะถูกตรวจสอบก่อนและจะรันลูปก็ต่อเมื่อเงื่อนไขเป็น true
ส่วน do while
จะทำงานในลูปก่อน 1 ครั้งเสมอ แล้วค่อยตรวจสอบเงื่อนไข ดังนั้นอย่างน้อยหนึ่งครั้งโค้ดจะถูกรัน
3. กรณีที่ควรใช้ do while
การขอข้อมูลจากผู้ใช้ซ้ำจนกว่าจะถูกต้อง
do while
เหมาะสำหรับตรวจสอบอินพุตจากผู้ใช้ เช่น การให้ป้อนรหัสผ่านซ้ำจนกว่าจะถูกต้อง สามารถใช้ do while
เพื่อให้ตรวจสอบอินพุตครั้งแรกได้ง่าย หากไม่ถูกต้องก็วนขอใหม่
ใช้ในเกมสำหรับการวนซ้ำสถานะ
ในโปรแกรมเกม หากต้องการให้ผู้เล่นเลือกการกระทำซ้ำ ๆ เช่น “เล่นต่อ” ก็สามารถใช้ do while
เพื่อควบคุมลูปของเกมได้จนกว่าผู้เล่นจะเลือกสิ้นสุดเกม
4. ตัวอย่างโค้ด do while
ตัวอย่างพื้นฐานของ do while
ตัวอย่างโค้ดต่อไปนี้จะแสดงวิธีใช้ do while
แบบง่าย
#include <stdio.h>
int main() {
int i = 0;
do {
printf("นับ: %dn", i);
i++;
} while (i < 5);
return 0;
}
ในตัวอย่างนี้ โค้ดใน do
จะถูกรันก่อน หาก i
น้อยกว่า 5 ก็จะวนซ้ำต่อไป ผลลัพธ์คือจะแสดงเลขตั้งแต่ 0
ถึง 4
ตัวอย่างการรับอินพุตจากผู้ใช้
ตัวอย่างโค้ดเมื่อผู้ใช้ต้องป้อนค่าตามเงื่อนไขที่กำหนด หากไม่ตรงเงื่อนไขจะวนขอใหม่
#include <stdio.h>
int main() {
int number;
do {
printf("กรุณาใส่ตัวเลขระหว่าง 1 ถึง 10: ");
scanf("%d", &number);
} while (number < 1 || number > 10);
printf("ค่าที่คุณกรอก: %dn", number);
return 0;
}
โค้ดนี้จะขอให้ผู้ใช้กรอกตัวเลขระหว่าง 1
ถึง 10
หากกรอกไม่ถูกต้อง จะขอซ้ำจนกว่าจะถูกต้อง

5. ลูปไม่มีที่สิ้นสุดและการควบคุม
การสร้างลูปไม่มีที่สิ้นสุด
สามารถใช้ do while
สร้างลูปไม่มีที่สิ้นสุดได้ หมายถึงเงื่อนไขเป็น true
ตลอด เวลาจะวนซ้ำไม่รู้จบ
do {
// โค้ดที่วนซ้ำตลอด
} while (1);
วิธีควบคุมลูปไม่มีที่สิ้นสุด
สามารถใช้ break
หรือ continue
เพื่อควบคุมการทำงานของลูป
break
: ออกจากลูปทันทีcontinue
: ข้ามการทำงานที่เหลือในลูปและเริ่มรอบใหม่
ตัวอย่างการใช้ break
ในลูปไม่มีที่สิ้นสุด
#include <stdio.h>
int main() {
int count = 0;
do {
printf("จำนวนรอบ: %dn", count);
count++;
if (count > 5) {
break;
}
} while (1);
return 0;
}
ในโค้ดนี้ หาก count
มากกว่า 5 จะใช้ break
เพื่อออกจากลูป
6. do while กับหลายเงื่อนไข
วิธีใช้หลายเงื่อนไข
ใน do while
สามารถใช้ตัวดำเนินการทางตรรกะเช่น &&
(AND) หรือ ||
(OR) เพื่อรวมหลายเงื่อนไขได้
do {
// คำสั่งที่ต้องการให้ทำ
} while (เงื่อนไข1 && เงื่อนไข2);
ตัวอย่างการใช้เงื่อนไขซับซ้อน
ตัวอย่างต่อไปจะตรวจสอบว่าผู้ใช้กรอกตัวเลขอยู่ในช่วง 1 ถึง 100 หากอยู่นอกช่วงจะวนขอข้อมูลใหม่
#include <stdio.h>
int main() {
int number;
do {
printf("กรุณาใส่ตัวเลขระหว่าง 1 ถึง 100: ");
scanf("%d", &number);
} while (number < 1 || number > 100);
printf("ค่าที่คุณกรอก: %dn", number);
return 0;
}
ถ้าค่าที่กรอกไม่อยู่ในช่วง 1-100 จะวนขอข้อมูลใหม่
7. สรุป
do while
มีประโยชน์เมื่อคุณต้องการให้ลูปทำงานอย่างน้อยหนึ่งครั้ง การใช้ while
และ do while
อย่างเหมาะสมช่วยให้โปรแกรมมีความยืดหยุ่นมากขึ้น ลองเรียนรู้วิธีควบคุมลูปด้วย break
, continue
และการใช้หลายเงื่อนไข เพื่อให้เข้าใจการวนซ้ำในภาษา C ได้อย่างแท้จริง
8. แบบฝึกหัดและตัวอย่างคำตอบ
โจทย์
เขียนโปรแกรมให้ผู้ใช้กรอกตัวเลขระหว่าง 1 ถึง 10 ถ้ากรอกไม่ถูกต้องให้ขอข้อมูลใหม่ เมื่อได้ค่าถูกต้องให้นำตัวเลขนั้นไปคูณ 2 แล้วแสดงผลลัพธ์
ตัวอย่างคำตอบ
#include <stdio.h>
int main() {
int number;
do {
printf("กรุณาใส่ตัวเลขระหว่าง 1 ถึง 10: ");
scanf("%d", &number);
} while (number < 1 || number > 10);
printf("ผลคูณ 2 ของค่าที่คุณกรอก: %dn", number * 2);
return 0;
}
ในโจทย์นี้จะใช้ do while
เพื่อตรวจสอบอินพุต หากอยู่นอกช่วงจะขอข้อมูลใหม่จนกว่าจะถูกต้อง
9. ข้อมูลที่เกี่ยวข้องและก้าวถัดไป
เมื่อเข้าใจ do while
แล้ว ควรเรียนรู้โครงสร้างลูปอื่น ๆ ในภาษา C เช่น for
และ while
เพื่อเลือกใช้ให้เหมาะกับแต่ละสถานการณ์ อีกหัวข้อสำคัญที่ควรเรียนรู้ถัดไปคือ “พอยน์เตอร์” ซึ่งจะช่วยให้เขียนโปรแกรมขั้นสูงในภาษา C ได้ ลองศึกษาต่อในหัวข้อนี้เพื่อพัฒนาทักษะของคุณ