คำสั่ง while
รูปแบบของคำสั่ง while เป็นดังนี้while (เงื่อนไขการวนซ้ำ)
คำสั่ง;
รูปแบบของคำสั่ง while เป็นดังนี้while (เงื่อนไขการวนซ้ำ)
คำสั่ง;
ผังงานของคำสั่ง while
เงื่อนไขการวนซ้ำ เป็นนิพจน์ใดๆ ที่สามารถประเมินค่าได้ โดยจะต้องเขียนไว้ระหว่างเครื่องหมาย ( และ ) เสมอเช่นเดียวกับคำสั่ง if และคำสั่ง if – else
เมื่อเริ่มต้นประมวลผลคำสั่ง while เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า ถ้าพบว่า เงื่อนไขการวนซ้ำ มีค่าเป็นจริง คำสั่ง ภายใต้คำสั่ง while จะถูกตรวจสอบค่าเป็นรอบแรก แล้ว เงื่อนไขการวนซ้ำจะถูกตรวจสอบค่าอีกครั้ง หากพบว่า เงื่อนไขการวนซ้ำ ยังมีค่าเป็น จริง คำสั่ง จะถูกตรวจสอบค่าอีกครั้ง จนกระทั่ง เงื่อนไขการวนซ้ำ มีค่าเป็น เท็จ คำสั่ง while จึงจะสิ้นสุดลง
การตรวจสอบค่า เงื่อนไขการวนซ้ำ ของคำสั่ง while ในครั้งแรก และพบว่ามีค่าเป็น เท็จ คำสั่งจะไม่ประมวลผลเลย
คำสั่ง ภายใต้คำสั่ง while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
ตัวอย่างที่ 4.2.2 โปรแกรมรับและแสดงค่าข้อมูล1
เงื่อนไขการวนซ้ำ เป็นนิพจน์ใดๆ ที่สามารถประเมินค่าได้ โดยจะต้องเขียนไว้ระหว่างเครื่องหมาย ( และ ) เสมอเช่นเดียวกับคำสั่ง if และคำสั่ง if – else
เมื่อเริ่มต้นประมวลผลคำสั่ง while เงื่อนไขการวนซ้ำ จะถูกตรวจสอบค่า ถ้าพบว่า เงื่อนไขการวนซ้ำ มีค่าเป็นจริง คำสั่ง ภายใต้คำสั่ง while จะถูกตรวจสอบค่าเป็นรอบแรก แล้ว เงื่อนไขการวนซ้ำจะถูกตรวจสอบค่าอีกครั้ง หากพบว่า เงื่อนไขการวนซ้ำ ยังมีค่าเป็น จริง คำสั่ง จะถูกตรวจสอบค่าอีกครั้ง จนกระทั่ง เงื่อนไขการวนซ้ำ มีค่าเป็น เท็จ คำสั่ง while จึงจะสิ้นสุดลง
การตรวจสอบค่า เงื่อนไขการวนซ้ำ ของคำสั่ง while ในครั้งแรก และพบว่ามีค่าเป็น เท็จ คำสั่งจะไม่ประมวลผลเลย
คำสั่ง ภายใต้คำสั่ง while อาจเป็นคำสั่งอย่างง่ายหรือคำสั่งเชิงประกอบ
ตัวอย่างที่ 4.2.2 โปรแกรมรับและแสดงค่าข้อมูล1
ผลลัพธ์ คือ
หมายเหตุ
หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์
^z หมายถึง ให้กดปุ่ม Ctrl - z บนแป้นพิมพ์
โปรแกรม InOut1.c แสดงการใช้คำสั่งของภาษาซี 2 คำสั่ง getchar() และ putchar() เพื่อใช้รับข้อมูลนำเข้าและแสดงผลลัพธ์แทนการใช้คำสั่ง scanf() และ printf()
คำสั่ง getchar() เป็นคำสั่งไม่มีอาร์กิวเมนต์ และจะรับอักขระ 1 ตัวจากแผงแป้นอักขระแล้ว ส่งกลับค่าจำนวนเต็มที่มีค่าในตารางรหัสแอสกีที่ตรงกับอักขระดังกล่าว
ฟังก์ชัน putchar() มีอาร์กิวเมนต์ 1 ตัวเป็นชนิด int และแสดงอักขระในตารางรหัสแอสกีที่มีค่าตรงกับจำนวนเต็มดังกล่าวจอภาพ
สำหรับ EOF เป็นค่าคงที่ที่นิยามอยู่ในแฟ้มส่วนหัวชื่อ stdio.h และใช้เป็นอักขระสำหรับตรวจสอบการสิ้นสุดการป้องกันข้อมูลซึ่งในที่นี้ คือการป้องกัน Ctrl - z
จากโปรแกรม InOut1.c ตราบใดที่อักขระผู้ใช้ป้อนไม่ใช้อักขระสิ้นสุดการป้อนข้อมูลเงื่อนไข การวนซ้ำ iochar != EOF จะยังมีค่าเป็นจริง และแสดงผลค่าอักขระนั้นออกทางจอภาพก่อนที่จะวนรับอักขระตัวถัดไป และในรอบที่ผู้ใช้ป้อน Ctrl - z เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จ และคำสั่ง while จะสิ้นสุดการทำงาน
ในกรณีที่ผู้ใช้ป้อน Ctrl-z ในครั้งแรก เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จและคำสั่ง while จะสิ้นสุดการทำงานในทันที โดยที่คำสั่งในบรรทัดที่ 11 และ 12 ไม่ถูกประมวลผลเลย
คำสั่งนี้มีลักษณะการทำงานคล้ายกับคำสั่ง While แต่มีส่วนแตกต่างอยู่เล็ก ๆ น้อย ๆ
ที่มี Do เพิ่มเข้ามานี่ดิ แล้วไอ้ Do นี่จะทำให้แตกต่างจาก While เดี่ยว ๆ
คำสั่ง do while เป็นคำสั่งที่กำหนดให้มีการทำงานวนรอบ คล้าย ๆ คำสั่ง While แต่
แตกต่างกันที่คำสั่ง do while จะให้ทำคำสั่งในลูป do ก่อน แล้วค่อยพิจารณาเงื่อนไขใน while
ถ้าค่าเงื่อนไขใน while เป็นจริง จึงจะวนรอบทำคำสั่งในลูป doต่อไป
หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์
^z หมายถึง ให้กดปุ่ม Ctrl - z บนแป้นพิมพ์
โปรแกรม InOut1.c แสดงการใช้คำสั่งของภาษาซี 2 คำสั่ง getchar() และ putchar() เพื่อใช้รับข้อมูลนำเข้าและแสดงผลลัพธ์แทนการใช้คำสั่ง scanf() และ printf()
คำสั่ง getchar() เป็นคำสั่งไม่มีอาร์กิวเมนต์ และจะรับอักขระ 1 ตัวจากแผงแป้นอักขระแล้ว ส่งกลับค่าจำนวนเต็มที่มีค่าในตารางรหัสแอสกีที่ตรงกับอักขระดังกล่าว
ฟังก์ชัน putchar() มีอาร์กิวเมนต์ 1 ตัวเป็นชนิด int และแสดงอักขระในตารางรหัสแอสกีที่มีค่าตรงกับจำนวนเต็มดังกล่าวจอภาพ
สำหรับ EOF เป็นค่าคงที่ที่นิยามอยู่ในแฟ้มส่วนหัวชื่อ stdio.h และใช้เป็นอักขระสำหรับตรวจสอบการสิ้นสุดการป้องกันข้อมูลซึ่งในที่นี้ คือการป้องกัน Ctrl - z
จากโปรแกรม InOut1.c ตราบใดที่อักขระผู้ใช้ป้อนไม่ใช้อักขระสิ้นสุดการป้อนข้อมูลเงื่อนไข การวนซ้ำ iochar != EOF จะยังมีค่าเป็นจริง และแสดงผลค่าอักขระนั้นออกทางจอภาพก่อนที่จะวนรับอักขระตัวถัดไป และในรอบที่ผู้ใช้ป้อน Ctrl - z เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จ และคำสั่ง while จะสิ้นสุดการทำงาน
ในกรณีที่ผู้ใช้ป้อน Ctrl-z ในครั้งแรก เงื่อนไขการวนซ้ำ iochar != EOF จะมีค่าเป็นเท็จและคำสั่ง while จะสิ้นสุดการทำงานในทันที โดยที่คำสั่งในบรรทัดที่ 11 และ 12 ไม่ถูกประมวลผลเลย
คำสั่งนี้มีลักษณะการทำงานคล้ายกับคำสั่ง While แต่มีส่วนแตกต่างอยู่เล็ก ๆ น้อย ๆ
ที่มี Do เพิ่มเข้ามานี่ดิ แล้วไอ้ Do นี่จะทำให้แตกต่างจาก While เดี่ยว ๆ
คำสั่ง do while เป็นคำสั่งที่กำหนดให้มีการทำงานวนรอบ คล้าย ๆ คำสั่ง While แต่
แตกต่างกันที่คำสั่ง do while จะให้ทำคำสั่งในลูป do ก่อน แล้วค่อยพิจารณาเงื่อนไขใน while
ถ้าค่าเงื่อนไขใน while เป็นจริง จึงจะวนรอบทำคำสั่งในลูป doต่อไป