วันพุธที่ 17 กันยายน พ.ศ. 2557

07:02
9.5 การใช้ฟังก์ชัน putc( ) และ getc( )

            9.5.1 ฟังก์ชัน putc( )
                        เป็นฟังชันที่ใช้บันทึกข้อมูลตัวอักขระตัวเดียวลงไปในแฟ้มข้อมูลที่ต้องการ
รูปแบบการใช้ฟังก์ชัน
putc(single_char,fp);
  
โดยที่ 

single_char  คือ  ค่าคงที่ชนิดตัวอักขระตัวเดียว  หรือตัวแปรชนิดsingle_character
fp  คือ  file  pointer  ของแฟ้มข้อมูลที่ต้องการบันทึกข้อมูลลงไป 
เพื่อความเข้าใจเกี่ยวกับการใช้งานฟังก์ชัน  putc( )  จึงควรศึกษาโปรแกรมตัวอย่างดังนี้
โปรแกรมตัวอย่างที่  9.1  แสดงการใช้ฟังก์ชัน  putc( )  บันทึกข้อมูลตัวอักขระลงแฟ้มข้อมูล

/*   file1.c     */
#include<stdio.h>                                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                                             /*  บรรทัดที่  2  */
#include<stdlib.h>                                                                             /*  บรรทัดที่  3  */
void main(void)                                                                                    /*  บรรทัดที่  4  */
{                                                                                                         /*  บรรทัดที่  5  */
      FILE *fp;                                                                                     /*  บรรทัดที่  6  */
      char ch;                                                                                 /*  บรรทัดที่  7  */
      clrscr();                                                                                  /*  บรรทัดที่  8  */
      if(( fp=fopen("a:testdata.dat","w"))==NULL)                   /*  บรรทัดที่  9  */
      {                                                                                               /*  บรรทัดที่  10  */
            printf("Error in open file");                                   /*  บรรทัดที่  11  */
            printf("\007");                                                         /*  บรรทัดที่  12  */
            exit(1);                                                                    /*  บรรทัดที่  13  */
      }                                                                                               /*  บรรทัดที่  14  */
      printf("Please press <Enter> to quit program.\n");       /*  บรรทัดที่  15  */
      printf("\nEnter your sentence : ");                                      /*  บรรทัดที่  16  */
      do                                                                                           /*  บรรทัดที่  17  */
      {                                                                                               /*  บรรทัดที่  18  */
            ch=getche( );                                                       /*  บรรทัดที่  19  */
            putc(ch, fp);                                                          /*  บรรทัดที่  20  */
      } while(ch !='\r');      /*   \r  = Enter  */                                /*  บรรทัดที่  21  */
      fclose(fp);                                                                              /*  บรรทัดที่  22  */
}                                                                                              /*  บรรทัดที่  23  */

  
หมายเหตุ  ก่อน  run  โปรแกรมต้องใส่แผ่นดิสก์เก็ตต์ไว้ในไดร์ฟ  a:  เพื่อเก็บแฟ้มข้อมูล  testdata.dat  ที่สร้างจากโปรแกรมนี้
ผลลัพธ์ที่ได้จากโปรแกรม
แผนผังลำดับงาน: จอภาพ: Please  press <Enter> to  quit  program.  Enter  your  sentence : My name is Kannikar  <enter>  แฟ้มข้อมูลที่ได้อยู่ที่  drive a:  ชื่อ  testdata.dat  ภายในเก็บข้อมูลดังนี้  : My name is Kannikar     

ข้อสังเกต  ตัวอักษรที่เป็นสีเข้มที่ปรากฏในผลลัพธ์ที่ได้จากโปรแกรมคือข้อความที่พิมพ์ผ่านคีย์บอร์ด
คำแนะนำ  เราค่อยตรวจสอบต่อไปว่าสามารถเขียนข้อมูลลงแฟ้มได้จริงหรือไม่   ในโปรแกรมตัวอย่างที่  9.2
คำอธิบายโปรแกรม 
จากโปรแกรมตัวอย่างที่  9.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้
บรรทัดที่  1  คำสั่ง  #include <stdio.h>  สำหรับโปรแกรมนี้  ฟังก์ชันที่เพิ่มขึ้นมาจากโปรแกรมก่อน ๆ ที่เราพบ  ที่ต้องใช้ควบคู่กับไฟล์  stdio.h  คือ  ฟังก์ชัน  fopen( )  ในบรรทัดที่  9
บรรทัดที่  3  คำสั่ง  #include <stdlib.h>  จะสนับสนุนการทำงานของฟังก์ชัน  exit( )  ในบรรทัดที่  13
บรรทัดที่  6  คำสั่ง  FILE  *fp;  รูปแบบการประกาศแฟ้มข้อมูล  โดยที่  fp  คือตัวชี้ตำแหน่งข้อมูลในแฟ้ม  (file  pointer)  เมื่อใช้คำสั่ง  FILE  *fp;  มีผลทำให้ตัว  file  pointer  ชี้ไปที่ตำแหน่งเริ่มต้นของแฟ้มข้อมูลทันที  (ในโปรแกรมนี้จะให้แฟ้มข้อมูลอยู่ที่ไดร์ฟ  a:  ชื่อ  testdata.dat  โดยที่  fp  นี้จะสามารถชี้ไปยังข้อมูลหรือการค้นข้อมูลจากแฟ้ม
บรรทัดที่  9  คำสั่งนี้จะสัมพันธ์  และต่อเนื่องกับคำสั่งบรรทัดที่  6  นั่นคือต้องการเปิดแฟ้มข้อมูลที่ไดร์ฟ  a:  ชื่อ  testdata.dat  เพื่อใช้สำหรับบันทึกข้อมูลลงแฟ้ม  (write)  อย่างเดียว  และคำสั่งบรรทัดที่  9  จะตรวจสอบด้วยว่า  fp  เท่ากับศูนย์  (NULL)  หรือไม่  ถ้า  fp  เท่ากับศูนย์  แสดงว่าเกิดข้อผิดพลาดในการเปิดไฟล์  หรือไม่สามารถเปิดไฟล์ที่ระบุไว้ได้  ก็จะไปทำคำสั่งใน  บรรทัดที่  10  ถึง  14  นั่นคือ  พิมพ์  Error  in  open  file  ที่จอภาพ  และมีเสียง  bell  ดังเตือน  กรณีที่จะเกิดข้อผิดพลาดได้  เช่น  ไม่ได้ใส่แผ่นที่ไดร์ฟ  a  แต่ถ้าเปิดแฟ้มข้อมูลได้ก็จะให้ค่า  fp  ที่ไม่เท่ากับศูนย์  และไปทำคำสั่งตั้งแต่บรรทัดที่  15  จนจบโปรแกรม
บรรทัดที่  15  และ  16  พิมพ์ข้อความบอกให้ทราบว่า  ถ้าต้องการออกจากโปรแกรมให้กด  Enter  แต่ถ้าจะทำงานต่อให้เติมประโยค  และไปทำงานต่อในคำสั่งถัดไป
บรรทัดที่  17  ถึง  21  คำสั่ง  do  จะวนรับตัวอักขระที่ผู้ใช้เติมเก็บไว้ที่ตัวแปร  ch  แล้วนำไปเขียนลงแฟ้มข้อมูล  และสุดท้าย  ตรวจสอบเงื่อนไขด้วยว่า  ผู้ใช้เติม  enter  หรือไม่  จะได้ออกจากการทำงาน  แต่ถ้าไม่ใช่ก็จะวนรับตัวอักขระไปเรื่อย ๆ
บรรทัดที่  22  คำสั่ง  fclose (fp);  ปิดแฟ้มข้อมูล
            9.5.2 ฟังก์ชัน getc( )
                        เป็นฟังก์ชันที่ใช้อ่านข้อมูลตัวอักขระตัวเดียวขึ้นจากแฟ้มข้อมูลที่ต้องการ
รูปแบบการใช้ฟังก์ชัน
getc(fp);
หรือ
single_char = getc(fp);
  
โดยที่  
single_char    คือ  ตัวแปรชนิด  single  character  ที่ใช้เก็บข้อมูลตัวอักขระ  ตัวเดียว
fp  คือ  file  pointer  ของแฟ้มข้อมูลที่ต้องการบันทึกข้อมูลลงไป 
เพื่อความเข้าใจเกี่ยวกับการใช้งานฟังก์ชัน  getc( )  จึงควรศึกษาโปรแกรมตัวอย่างดังนี้
โปรแกรมตัวอย่างที่  9.2  แสดงการใช้ฟังก์ชัน  getc( )  อ่านข้อมูลตัวอักขระขึ้นจากแฟ้มข้อมูล

/*  file2.c     */
#include<stdio.h>                                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                                             /*  บรรทัดที่  2  */
#include<stdlib.h>                                                                             /*  บรรทัดที่  3  */
void main(void)                                                                                    /*  บรรทัดที่  4  */
{                                                                                                        /*  บรรทัดที่  5  */
      FILE *fp;                                                                                            /*  บรรทัดที่ 6  */
      char ch;   clrscr();                                                                /*  บรรทัดที่  7  */
      clrscr();                                                                                  /*  บรรทัดที่  8  */
      if(( fp=fopen("a:testdata.dat","r"))==NULL)                     /*  บรรทัดที่  9  */
      {                                                                                               /*  บรรทัดที่  10  */
            printf("Error in open file");                                   /*  บรรทัดที่  11  */
            printf("\007");                                                         /*  บรรทัดที่  12  */
            exit(1);                                                                    /*  บรรทัดที่  13  */
      }                                                                                               /*  บรรทัดที่  14  */
      do                                                                                           /*  บรรทัดที่  15  */
      {                                                                                               /*  บรรทัดที่  16  */
            ch=getc(fp);                                                         /*  บรรทัดที่  17  */
            putchar(ch);                                                         /*  บรรทัดที่  18  */
      } while(ch !=EOF);                                                              /*  บรรทัดที่  19  */
      fclose(fp);                                                                              /*  บรรทัดที่  20  */
      getch();                                                                                  /*  บรรทัดที่  21  */
      }                                                                                                /*  บรรทัดที่  22  */

  
หมายเหตุ  ก่อน  run  โปรแกรมต้องใส่แผ่นดิสก์เก็ตต์ไว้ในไดร์ฟ  a:  ที่มีแฟ้ม  testdata.dat  ที่เคยสร้างไว้แล้ว  เพื่อให้โปรแกรมอ่านข้อมูลจากแฟ้มนี้
ผลลัพธ์ที่ได้จากโปรแกรม
แผนผังลำดับงาน: จอภาพ: My name is Kannikar      

ข้อสังเกต  ข้อมูลที่อ่านได้จากโปรแกรมตัวอย่างที่  9.2  เป็นข้อมูลที่เราเขียนใส่ไว้ในแฟ้มข้อมูลจากโปรแกรมตัวอย่างที่  9.1
คำอธิบายโปรแกรม 
            จากโปรแกรมตัวอย่างที่  9.2  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้
การทำงานของโปรแกรมตัวอย่างที่  9.2  จะคล้ายกับโปรแกรมตัวอย่างที่  9.1  คือมีการเปิดแฟ้มข้อมูลขึ้นมา  ชื่อ  testdata.dat  ที่ไดร์ฟ  a:  แต่เปิดขึ้นมาเพื่ออ่านข้อมูลในแฟ้ม  ซึ่งมีการตรวจสอบการเปิดแฟ้มข้อมูลก่อนว่าผิดพลาดหรือไม่  ถ้าผิดพลาดจะพิมพ์ข้อความบอก  และมีเสียง  bell  ดังขึ้น  แต่ถ้าเปิดได้ก็จะเข้าไปอ่านข้อมูลในแฟ้มข้อมูลออกมาแสดงเรื่อย ๆ  จนกว่าจะจบแฟ้ม  ซึ่งคำสั่งบรรทัดที่  19  (ch != EOF);  จะเป็นการตรวจสอบว่าแฟ้มข้อมูลสิ้นสุดหรือไม่  (EOF  คือ  End  Of  File)

0 ความคิดเห็น:

แสดงความคิดเห็น