การทำงานของโปรแกรมในบางครั้งต้องการให้มีการทำงานในคำสั่งหรือชุดคำสั่งเดิมซ้ำ ๆ ซึ่งเรียกว่าการทำงานแบบวนลูป (Loop) เช่นการรับชื่อของนักศึกษาจำนวน 30 คน โปรแกรมจะต้องมีการทำงานซ้ำในการรับชื่อจำนวน 30 รอบ ซึ่งการทำงานแบบวนลูปจะแบ่งออกเป็น 2 ลักษณะ คือ
1. มีจำนวนรอบในการวนทำงานที่แน่นอน ซึ่งจะมีตัวนับรอบ (Counter) ตรวจสอบจำนวนรอบ
2. มีจำนวนรอบในการวนการทำงานที่ไม่แน่นอน ซึ่งจะตรวจสอบการวนรอบจากเงื่อนไขที่ผู้เขียนโปรแกรมกำหนด
ในภาษาซีคำสั่งที่ใช้ในการทำงานแบบวนลูป มี 3 คำสั่ง คือ คำสั่ง for while และ do-while โดยที่คำสั่ง for จะใช้ในกรณีที่การวนลูปมีจำนวนรอบที่แน่นอน ส่วน while และ do-while สามารถใช้ได้ทั้งการวนลูปที่มีจำนวนรอบแน่นอน และ ไม่แน่นอน
คำสั่ง while
การทำงานของคำสั่ง while จะมีการตรวจสอบเงื่อนไขก่อนการทำงาน ถ้าผลการตรวจสอบเป็นจริงจึงจะทำคำสั่งที่กำหนดไว้ แล้ววนกลับไปตรวจสอบเงื่อนไขอีกครั้ง ถ้าผลการตรวจสอบยังเป็นจริง ก็จะทำงานตามคำสั่งที่กำหนดไว้ แล้ววนกลับไปตรวจสอบเงื่อนไขอีก เป็นเช่นนี้ไปเรื่อย ๆ จนกว่า ผลการตรวจสอบจะเป็นเท็จ จึงจบการทำงาน
รูปแบบ
while ( condition )
statement;
โดยที่ condition คือ เงื่อนไขที่อยู่ในรูปของนิพจน์ที่สร้างขึ้นเพื่อใช้ตรวจสอบการทำซ้ำ โดยจะต้องเขียนเงื่อนไขภายในเครื่องหมาย ( )
statement คือ คำสั่งที่ต้องการให้ทำซ้ำ
ถ้าคำสั่งที่ต้องการให้ทำงานเมื่อผลการตรวจสอบเป็นจริง มีมากกว่า 1 คำสั่ง จะต้องเขียนชุดคำสั่งนั้นภายในเครื่องหมาย { }
รูปแบบ
while (condition )
{ statement 1;
statement 2;
:
statement n;
}
ตัวอย่างที่ 1 พิมพ์คำว่า N P R U จำนวน 3 บรรทัด
#include <stdio.h>
#include <conio.h>
main()
{int i=1;
while(i<=3)
{printf("N P R U\n");
i = i+1;
}
getch();
}
ตัวอย่างที่ 2 หาค่าเฉลี่ยของตัวเลข 3 จำนวน ที่ผู้ใช้ป้อน
#include <stdio.h>
#include <conio.h>
main()
{int i=1;
float num,sum = 0;
while(i<=3)
{printf("input num : ");
scanf("%f",&num);
sum = sum+num;
i = i+1;
}
printf("\nsummation = %.2f\n",sum);
printf("average = %.2f\n",sum/3);
getch();
}
ตัวอย่างที่ 3 แสดงคำ N P R U เป็นจำนวนบรรทัดตามที่ผู้ใช้ป้อนค่า
#include <stdio.h>
#include <conio.h>
main()
{int i=1,round;
printf("How many loops do you want ? ");
scanf("%d",&round);
while(i <= round)
{printf("N P R U\n");
i = i+1;
}
getch();
}
ตัวอย่างที่ 4 พิมพ์ประโยค This is a book จากนั้นจะถามผู้ใช้ว่าต้องการจบการทำงานหรือไม่ ถ้าผู้ใช้กดแป้น y หรือ Y หรือกดแป้นอื่น ๆ ที่ไม่ใช่ n หรือ N จะสิ้นสุดการทำงาน โปรแกรมนี้จะใช้ฟังก์ชัน toupper เพื่อเปลี่ยนตัวอักษรที่ผู้ใช้พิมพ์ให้เป็นตัวพิมพ์ใหญ่ เนื่องจากต้องการให้ตรวจสอบเงื่อนไขได้ทั้งตัวอักษรพิมพ์ใหญ่และพิมพ์เล็ก ฟังก์ชัน toupper ถูกนิยามไว้ใน I/O Library ในไฟล์ชื่อ “ctype.h”
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
main()
{char choice = 'n';
while (toupper(choice) = = 'N')
{printf("\n\n==============\n");
printf("This is a book\n");
printf("==============\n\n");
printf("exit (y/n) : ");
choice = getche();
}
printf("\npress any key to exit");
getch();
}