การควบคุมการทำงาน
สำหรับบทนี้จะอธิบายถึงคำสั่งควบคุมการทำงานของโปรแกรม ซึ่งแบ่งกลุ่มตามลักษณะการทำงานตามข้อกำหนดมาตรฐานของสถาบัน ANSI (American National Standards Institute) กำหนดให้ภาษา C มีคำสั่งที่ใช้ควบคุมการทำงานของโปรแกรมดังนี้
1) คำสั่งวนลูปหรือทำงานซ้ำ ๆ เป็นลูป (loop statements) ได้แก่ คำสั่ง for, while, do while และมีคำสั่งออกจากลูปคือคำสั่ง break หรือทำงานในรอบต่อไป คือคำสั่ง continue
2) คำสั่งทดสอบเงื่อนไขในการตัดสินใจ (decision statements) ได้แก่ คำสั่ง if, if else, โครงสร้าง else if (หรือ nested if) และคำสั่ง switch
3) คำสั่งที่สั่งให้ไปทำงานตามจุดที่กำหนดให้ (goto statements) ได้แก่ คำสั่ง goto และ label ซึ่งแต่ละคำสั่งมีรายละเอียดดังต่อไปนี้
2) คำสั่งทดสอบเงื่อนไขในการตัดสินใจ (decision statements) ได้แก่ คำสั่ง if, if else, โครงสร้าง else if (หรือ nested if) และคำสั่ง switch
3) คำสั่งที่สั่งให้ไปทำงานตามจุดที่กำหนดให้ (goto statements) ได้แก่ คำสั่ง goto และ label ซึ่งแต่ละคำสั่งมีรายละเอียดดังต่อไปนี้
คำสั่งวนลูปหรือทำงานซ้ำ ๆ เป็นลูป (loop statements)
คำสั่งวนลูปเป็นคำสั่งที่สามารถควบคุมโปรแกรมให้ทำงานเป็นจำนวนรอบตามที่เรากำหนดไว้ หรือทำงานจนกว่าเงื่อนไขที่กำหนดไว้เป็นเท็จ จึงจะออกจากคำสั่งวนลูปได้
คำสั่ง for
for เป็นคำสั่งที่สั่งให้โปแกรมมีการทำงานซ้ำ ๆ วนลูปจนกว่าเงื่อนไขที่กำหนดไว้เป็นเท็จ จึงออกจากคำสั่ง for ไปทำคำสั่งถัดไป ควรใช้คำสั่ง for ในกรณีที่ทราบจำนวนรอบของการทำงาน
for เป็นคำสั่งที่สั่งให้โปแกรมมีการทำงานซ้ำ ๆ วนลูปจนกว่าเงื่อนไขที่กำหนดไว้เป็นเท็จ จึงออกจากคำสั่ง for ไปทำคำสั่งถัดไป ควรใช้คำสั่ง for ในกรณีที่ทราบจำนวนรอบของการทำงาน
รูปแบบการใช้คำสั่ง for
for (expression1; expression2; expression3)
statement;
หรือ
for (expression1; expression2; expression3)
{
statement(s);
}
statement;
หรือ
for (expression1; expression2; expression3)
{
statement(s);
}
โดยที่
expression1 คือ นิพจน์ที่ใช้กำหนดค่าเริ่มต้นให้กับตัวแปรที่จะใช้วนลูป
expression2 คือ นิพจน์ที่ใช้ทดสอบเงื่อนไข ซึ่งจะมีค่าจริงหรือเท็จอย่างใดอย่างหนึ่งเท่านั้น
expression3 คือ นิพจน์ที่ใช้เพิ่มหรือลดค่าตัวแปรที่จะใช้วนลูป
statement(s) คือ คำสั่งต่าง ๆ ถ้ามีมากกว่า 1 คำสั่ง จะต้องเขียนอยู่ภายในเครื่องหมาย {….}
expression2 คือ นิพจน์ที่ใช้ทดสอบเงื่อนไข ซึ่งจะมีค่าจริงหรือเท็จอย่างใดอย่างหนึ่งเท่านั้น
expression3 คือ นิพจน์ที่ใช้เพิ่มหรือลดค่าตัวแปรที่จะใช้วนลูป
statement(s) คือ คำสั่งต่าง ๆ ถ้ามีมากกว่า 1 คำสั่ง จะต้องเขียนอยู่ภายในเครื่องหมาย {….}
ลักษณะการทำงานของคำสั่ง for สามารถเขียนเป็นแผนผังได้ดังนี้
ผังงานแสดงลักษณะการทำงานของคำสั่ง for
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง for เพื่อวนแสดงตัวเลข 1 ถึง 10 ออกแสดงที่จอภาพ
/* for1.c */ #include<stdio.h> #include<conio.h> void main(void) { int num; clrscr( ); for (num=1; num<=10; num++) printf( "%3d\n", num); /* end for */ printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง for เพื่อวนคำนวณแม่สูตรคูณ แม่ต่าง ๆ ตามผู้ใช้เติม และแสดงผลที่จอภาพ
/* for2.c */ #include<stdio.h> #include<conio.h> void main(void) { int k,i; clrscr(); printf("input number >>> "); scanf("%d",&k); for (i=1; i<=12; i++) printf("%d x %d = %d\n",k,i,i*k); printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
โปรแกรมตัวอย่างที่ 4.3 แสดงการใช้คำสั่ง for เพื่อวนคำนวณค่าสะสมตัวเลข 1 ถึง 10 และแสดงผลออกจอภาพ
/* for3.c */ #include<stdio.h> #include<conio.h> void main(void) { int i, sum; clrscr( ); for( i=1, sum=0; i<=10; i++ ) { sum+=i; printf("I = %d, SUM = %d\n", i, sum); } /* end for */ printf("\n\nI = %d, SUM = %d",i,sum); printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง for เพื่อวนแสดงตัวเลขแต่ละแถว ซึ่งแสดงแถวละ 10 ตัว ออกแสดงที่จอภาพ
/* for4.c */ #include<stdio.h> #include<conio.h> void main(void) { int row, col; clrscr( ); for (row=1; row<=5; row++) { for( col=1; col<=10 ; col++ ) printf("%2d",row ); printf("\n"); } /* end for(row) */ printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
คำสั่ง while
while เป็นคำสั่งที่มีการทำงานซ้ำ ๆ เป็นลูป และมีลักษณะการทำงานของคำสั่งคล้ายกับคำสั่ง for แตกต่างกันตรงที่ การใช้ while ไม่ต้องทราบจำนวนรอบของการทำงานที่แน่นอน แต่ต้องมีเงื่อนไขที่เป็นเท็จจึงจะออกจากคำสั่ง while ได้
while เป็นคำสั่งที่มีการทำงานซ้ำ ๆ เป็นลูป และมีลักษณะการทำงานของคำสั่งคล้ายกับคำสั่ง for แตกต่างกันตรงที่ การใช้ while ไม่ต้องทราบจำนวนรอบของการทำงานที่แน่นอน แต่ต้องมีเงื่อนไขที่เป็นเท็จจึงจะออกจากคำสั่ง while ได้
รูปแบบการใช้คำสั่ง while
while (expression) statement;
หรือ
while (expression)
{
statement(s);
}
หรือ
while (expression)
{
statement(s);
}
โดยที่
expression คือ นิพจน์ที่ใช้ทดสอบเงื่อนไข ถ้านิพจน์นี้ให้ผลลัพธ์เป็นจริงจะทำตามคำสั่งที่อยู่ภายในคำสั่ง while จนกว่าเงื่อนไขเป็นเท็จจึงออกจากคำสั่ง while ได้
ลักษณะการทำงานของคำสั่ง while สามารถเขียนเป็นแผนผังได้ดังนี้
ผังงานแสดงลักษณะการทำงานของคำสั่ง while
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง while เพื่อวนคำนวณค่าสะสมตัวเลข 1 ถึง 10 และหาค่าเฉลี่ย แล้วแสดงผลออกจอภาพ
/* while1.c */ #include<stdio.h> #include<conio.h> void main(void) { int n=1; float sum =0 , avg; clrscr( ); while ( n < 11 ) { sum+=n; n++; } /* end while */ n--; avg = sum/n; printf("N = %d, Sum = %.2f\n",n, sum); printf("Average = %.2f", avg); printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง while เพื่อวนทำงานให้ผู้ใช้เติมตัวอักษร และ แสดงผลออกจอภาพไปเรื่อย ๆ จนกว่าจะกด enter ถึงหยุดการทำงาน
/* while2.c */ #include<stdio.h> #include<conio.h> void main(void) { char ch='A'; while (ch != '\r') { clrscr(); printf("Enter a character : "); ch=getche(); printf("\nYour type a character is...%c", ch); getch(); } /* end while */ } |
ผลลัพธ์ที่ได้จากโปรแกรม
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง while เพื่อวนการทำงานให้ผู้ใช้เติมตัวเลข เต็มบวก หรือ เต็มลบ หรือ ศูนย์ และมีการนับจำนวนตัวเลขแต่ละชนิดด้วย แล้วแสดงผลที่ได้ออกจอภาพ
/* while3.c */ #include <stdio.h> #include <conio.h> void main(void) { float in_key; int p=0,z=0,n=0, c=1; clrscr(); while (c<=10) { printf("Enter a value %d : ", c); scanf("%f", &in_key); if (in_key<0.0) n++; else if (in_key==0.0) z++; else p++; c++; } printf("Negative = %d\n", n); printf("Positive = %d\n", p); printf("Zero = %d\n", z); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
คำสั่ง do while
do while เป็นคำสั่งที่มีการทำงานซ้ำ ๆ วนลูป คล้ายกับคำสั่ง while มาก แตกตางกันตรงที่คำสั่ง do while จะทดสอบเงื่อนไขหลังจากที่ได้ทำงานตามคำสั่งภายในลูปไปแล้ว 1 รอบ จากนั้นจึงค่อยย้อนกลับมาทดสอบเงื่อนไขอีกครั้งหนึ่ง ถ้าเงื่อนไขเป็นจริงก็จะทำงานตามคำสั่งภายในลูป แต่ถ้าเงื่อนไขเป็นเท็จจะออกจากคำสั่ง do while ทันที
do while เป็นคำสั่งที่มีการทำงานซ้ำ ๆ วนลูป คล้ายกับคำสั่ง while มาก แตกตางกันตรงที่คำสั่ง do while จะทดสอบเงื่อนไขหลังจากที่ได้ทำงานตามคำสั่งภายในลูปไปแล้ว 1 รอบ จากนั้นจึงค่อยย้อนกลับมาทดสอบเงื่อนไขอีกครั้งหนึ่ง ถ้าเงื่อนไขเป็นจริงก็จะทำงานตามคำสั่งภายในลูป แต่ถ้าเงื่อนไขเป็นเท็จจะออกจากคำสั่ง do while ทันที
รูปแบบการใช้คำสั่ง do while
do{ statement(s); } while (expression); |
ลักษณะการทำงานของคำสั่ง do while สามารถเขียนเป็นแผนผังได้ดังนี้
ผังงานแสดงลักษณะการทำงานของคำสั่ง do while
ข้อควรระวังในการใช้คำสั่ง do while
ควรระวังเงื่อนไขของคำสั่ง do while ต้องพิจารณาให้ดีว่ามีทั้งกรณีที่เป็นจริงและเท็จอยู่หรือไม่ ถ้ามีอยู่ทั้ง 2 กรณี แสดงว่าใช้คำสั่งนี้ได้ถูกต้องตามไวยากรณ์ของคำสั่งนี้ ถ้ามีเฉพาะกรณีที่เงื่อนไขเป็นจริงเท่านั้นแสดงว่าเกิดลักษณะการทำงานวนลูป (looping) ไม่มีทางออกจากคำสั่งนี้ ในทำนองกลับกันถ้าเงื่อนไขเป็นเท็จอย่างเดียว จะทำคำสั่ง do while เพียงครั้งเดียว
ควรระวังเงื่อนไขของคำสั่ง do while ต้องพิจารณาให้ดีว่ามีทั้งกรณีที่เป็นจริงและเท็จอยู่หรือไม่ ถ้ามีอยู่ทั้ง 2 กรณี แสดงว่าใช้คำสั่งนี้ได้ถูกต้องตามไวยากรณ์ของคำสั่งนี้ ถ้ามีเฉพาะกรณีที่เงื่อนไขเป็นจริงเท่านั้นแสดงว่าเกิดลักษณะการทำงานวนลูป (looping) ไม่มีทางออกจากคำสั่งนี้ ในทำนองกลับกันถ้าเงื่อนไขเป็นเท็จอย่างเดียว จะทำคำสั่ง do while เพียงครั้งเดียว
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง do while เพื่อวนลูปแสดง main memu ให้ผู้ใช้เลือกเมนู ไปเรื่อย ๆ จนกว่าเลือกเมนูที่ 5 ถึงจะออกจากโปรแกรม
/* dowhile1.c */ #include<stdio.h> #include<conio.h> void main(void) { char choice; clrscr(); do { printf("\n\n******* MAIN MENU *******\n"); printf("*************************\n\n"); printf("1. Create New File\n"); printf("2. Use an Old File\n"); printf("3. Edit data record in File \n"); printf("4. Append data record in File\n"); printf("5. Exit Program\n"); printf("Enter your choice(1,2,3,4,5): "); choice=getche(); }while(choice != '5'); } |
ผลลัพธ์ที่ได้จากโปรแกรม
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง do while เพื่อวนลูป คำนวณค่าผลบวกตัวเลข 1 ถึง 100
/* dowhile2.c */ #include <stdio.h> #include <conio.h> void main(void) { int i=1, sum=0; clrscr(); do { sum = sum+i; i++; } while (i<=100); printf("Sum = %d", sum); printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
คำสั่ง break
break เป็นคำสั่งที่สั่งให้ออกจากคำสั่ง for หรือ while หรือ do while หรือคำสั่ง switch (คำสั่ง switch อธิบายไว้ในหัวข้อ 2.4)
break เป็นคำสั่งที่สั่งให้ออกจากคำสั่ง for หรือ while หรือ do while หรือคำสั่ง switch (คำสั่ง switch อธิบายไว้ในหัวข้อ 2.4)
รูปแบบการใช้คำสั่ง break
break;
โปรแกรมตัวอย่างที่แสดงการใช้คำสั่ง break ควบคู่กับคำสั่ง for
/* break.c */ #include<stdio.h> #include<conio.h> void main(void) { int j; clrscr(); for (j=1; j<=20; j++) { printf("%d\t",j); if (j==10) break; /* break when j==10 */ } /* end for */ printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม
คำสั่ง continue
continue เป็นคำสั่งที่สั่งให้กลับไปทำงานที่คำสั่งแรกของลูปคำสั่ง for หรือ while หรือ do while ทำให้มีการทำงานในรอบต่อไป
continue เป็นคำสั่งที่สั่งให้กลับไปทำงานที่คำสั่งแรกของลูปคำสั่ง for หรือ while หรือ do while ทำให้มีการทำงานในรอบต่อไป
รูปแบบการใช้คำสั่ง continue
continue;
โปรแกรมตัวอย่าง แสดงการใช้คำสั่ง continue ควบคู่กับคำสั่ง for
/* continue.c */ #include<stdio.h> #include<conio.h> void main(void) { int j; clrscr(); for( j=1; j<=20; j++ ){ printf("%d\t",j); if (j==5) { j=j+10; continue; } } printf("\n\nPress any key back to program..."); getch(); } |
ผลลัพธ์ที่ได้จากโปรแกรม