บทที่ 5

การควบคุมการทำงาน
            สำหรับบทนี้จะอธิบายถึงคำสั่งควบคุมการทำงานของโปรแกรม  ซึ่งแบ่งกลุ่มตามลักษณะการทำงานตามข้อกำหนดมาตรฐานของสถาบัน  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  ซึ่งแต่ละคำสั่งมีรายละเอียดดังต่อไปนี้
คำสั่งวนลูปหรือทำงานซ้ำ ๆ เป็นลูป (loop  statements)
คำสั่งวนลูปเป็นคำสั่งที่สามารถควบคุมโปรแกรมให้ทำงานเป็นจำนวนรอบตามที่เรากำหนดไว้  หรือทำงานจนกว่าเงื่อนไขที่กำหนดไว้เป็นเท็จ  จึงจะออกจากคำสั่งวนลูปได้
คำสั่ง  for
for  เป็นคำสั่งที่สั่งให้โปแกรมมีการทำงานซ้ำ ๆ วนลูปจนกว่าเงื่อนไขที่กำหนดไว้เป็นเท็จ  จึงออกจากคำสั่ง  for  ไปทำคำสั่งถัดไป  ควรใช้คำสั่ง  for  ในกรณีที่ทราบจำนวนรอบของการทำงาน
รูปแบบการใช้คำสั่ง  for
for  (expression1; expression2; expression3)
       statement;
หรือ
for  (expression1; expression2; expression3)
{
      statement(s);
}
  
           
โดยที่   
expression1  คือ นิพจน์ที่ใช้กำหนดค่าเริ่มต้นให้กับตัวแปรที่จะใช้วนลูป
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
while  (expression)  statement;
หรือ
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

do{
statement(s);
}  while  (expression);
ลักษณะการทำงานของคำสั่ง  do  while  สามารถเขียนเป็นแผนผังได้ดังนี้

ผังงานแสดงลักษณะการทำงานของคำสั่ง  do  while

ข้อควรระวังในการใช้คำสั่ง  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
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
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();                                                                              
}                                                                                         

ผลลัพธ์ที่ได้จากโปรแกรม