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 ได้ ลองศึกษาต่อในหัวข้อนี้เพื่อพัฒนาทักษะของคุณ



