บทที่ 3

ฟังก์ชันรับข้อมูล  (input functions)
ในเนื้อหาฟังก์ชันการับข้อมูลของภาษา  C  มีฟังก์ชันที่ใช้ในการรับข้อมูลจากคีย์บอร์ด  อยู่หลายฟังก์ชันที่จะกล่าวถึง  ดังนี้คือ ฟังก์ชัน  scanf( ), ฟังก์ชัน  getchar( ), ฟังก์ชัน  getch( ), ฟังก์ชัน  getche( )  และฟังก์ชัน  gets( )  ซึ่งแต่ละฟังก์ชันมีรายละเอียดของการใช้งานดังนี้
scanf( )
เป็นฟังก์ชันที่ใช้ในการรับข้อมูล จากคีย์บอร์ดเข้าไปเก็บไว้ในตัวแปรที่กำหนดไว ้โดยสามารถรับข้อมูลที่เป็นตัวเลขจำนวนเต็ม  ตัวเลขทศนิยม  ตัวอักขระตัวเดียว หรือข้อความก็ได
รูปแบบการใช้งานฟังก์ชัน
scanf(control  string, argument  list);
โดยที่
control  string  คือ  รหัสรูปแบบข้อมูล (format code)  โดยจะต้องเขียนอยู่ภายใต้เครื่องหมาย  “……..”  (double  quotation)
argument list คือ  ชื่อตัวแปรที่ใช้เก็บข้อมูลโดยจะต้องใช้เครื่องหมาย  &  (ampersand)  นำหน้าชื่อตัวแปร  ยกเว้นตัวแปรชนิด  string  ไม่ต้องมีเครื่องหมาย  &  นำหน้าชื่อ  ถ้ามีตัวแปรมากกว่า  1  ตัวแปร  ให้ใช้เครื่องหมาย  ,  (comma)  คั่นระหว่างตัวแปรแต่ละตัว
ตาราง แสดงรหัสแบบข้อมูล  ที่สามารถใช้ในฟังก์ชัน  scanf( )

รหัสรูปแบบ
(format  code)
ความหมาย
%c
  ใช้กับข้อมูลชนิดตัวอักขระตัวเดียว  (single  character :  char)
%d
  ใช้กับข้อมูลชนิดตัวเลขจำนวนเต็ม (integer : int)  โดยสามารถใช้กับตัวเลขฐาน  10  เท่านั้น
%e
  ใช้กับข้อมูลชนิดตัวเลขจุดทศนิยม  (floating  point : float)
%f, %lf
ใช้กับข้อมูลชนิด  float  และ  double  ตามลำดับ
%g
ใช้กับข้อมูลชนิด  float
%h
ใช้กับข้อมูลชนิด  short  integer
%l
ใช้กับข้อมูลชนิด  int  โดยใช้กับตัวเลขฐาน 8, ฐาน 10 และฐาน 16
%o
ใช้กับข้อมูลชนิด  int  โดยสามารถใช้กับตัวเลขฐาน  8  เท่านั้น
%u
ใช้กับข้อมูลชนิด  unsigned  int  โดยใช้กับตัวเลขฐาน  10  เท่านั้น
%x
ใช้กับข้อมูลชนิด  int  โดยสามารถใช้กับตัวเลขฐาน  16  เท่านั้น
%s
ใช้กับข้อมูลชนิด  string

โปรแกรมตัวอย่าง แสดงโปรแกรมการใช้ฟังก์ชัน  scanf( )  ในการรับข้อมูลจากคีย์บอร์ดเข้าไปเก็บไว้ในตัวแปรชนิดจำนวนเต็ม

 /*          scanf1.c             */                                             
#include<stdio.h>                                                   
void main(void)                                                      
{                                                                           
      int  a;                                                               
      scanf("%d", &a);                                            
}                                                                            

ผลลัพธ์ที่ได้จากโปรแกรม
หน้าจอว่าง ๆ  มีเคอร์เซอร์กระพริบเพื่อรอรับข้อมูลจากคีย์บอร์ด  (ข้อมูลที่ต้องการนั้นเป็นจำนวนเต็ม  เพื่อนำไปเก็บไว้ที่ตัวแปร  a)  ซึ่งผู้ใช้ควรเติมข้อมูลตัวเลขจำนวนเต็มเพื่อให้สัมพันธ์กับชนิดของตัวแปร

โปรแกรมตัวอย่าง แสดงโปรแกรมการใช้ฟังก์ชัน  scanf( )  ในการรับข้อมูลจากคีย์บอร์ดเข้าไปเก็บไว้ในตัวแปรชนิดจำนวนเต็ม  และนำค่าของตัวแปรออกแสดงผลที่จอภาพ


 /*          scanf2.c             */
#include<stdio.h>                                                                          
   void main(void)                                                                          
{                                                                                                       
      int  a;                                                                                
      scanf("%d", &a);                                                             
      printf("Your enter is ...%d", a);                                       
}                                                                                             

ผลลัพธ์ที่ได้จากโปรแกรม 
โปรแกรมตัวอย่าง แสดงโปรแกรมการใช้ฟังก์ชัน  scanf( )  ในการรับข้อมูลจากคีย์บอร์ดเข้าไปเก็บไว้ในตัวแปรชนิดตัวอักษร  เลขจำนวนเต็ม  และเลขทศนิยม  และนำค่าของตัวแปรออกแสดงผลที่จอภาพ

 /*          scanf3.c             */
#include<stdio.h>                                                                          
#include<conio.h>                                                                         
void main(void)                                                                              
{    char name[50];                                                                        
      int  age;                                                                              
      float weight, height;                                                         
      clrscr( );                                                                           
      printf("Enter your Name and Age: ");                          
      scanf("%s %d", name, &age);                                        
      printf("Enter your Weight and Height : ");                  
      scanf("%f %f", &weight, &height);                              
      printf("\nYour name is ...%s.\n",name);                        
      printf("You  are %d years old.\n",age);                         
      printf("Your weight is ...%f cm.\n",weight);                 
      printf("Your height is ...%f cm.\n",height);                   
}                                                                                     


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

ฟังก์ชัน  getchar( )
เป็นฟังก์ชันที่ใช้รับข้อมูลจากคีย์บอร์ดเพียง  1  ตัวอักขระ  โดยการรับข้อมูลของฟังก์ชันนี้จะต้องกดแป้น  enter  ทุกครั้งที่ป้อนข้อมูลเสร็จ  จึงทำให้เห็นข้อมูลที่ป้อนปรากฏบนจอภาพด้วย  ถ้าต้องการนำข้อมูลที่ป้อนผ่านทางคีย์บอร์ดไปใช้งาน  จะต้องกำหนดตัวแปรชนิด  single  character  (char)  ขึ้นมา  1  ตัว  เพื่อเก็บค่าข้อมูลที่รับผ่านทางคีย์บอร์ด  ในทางตรงกันข้ามถ้าไม่ต้องการใช้ข้อมูลที่ป้อนผ่านทางคีย์บอร์ดก็ไม่ต้องกำหนดตัวแปรชนิด  char  ขึ้นมา           
 รูปแบบการใช้งานฟังก์ชัน

getchar( );
หรือ         char_var = getchar( );
โดยที่
getchar( )  คือ  ฟังก์ชันที่ใช้รับข้อมูลเพียง  1  ตัวอักขระจากคีย์บอร์ด  โดยฟังก์ชันนี้จะไม่มี  argument ซึ่งอาจจะใช้ getchar(void) แทนคำว่า getchar( ) ก็ได้ แต่นิยมใช้ getchar( ) มากกว่า 
char_var  คือ  ตัวแปรชนิด  char  ซึ่งจะเก็บข้อมูล  1  ตัวอักขระที่ป้อนผ่านทางคีย์บอร์ด

โปรแกรมตัวอย่าง แสดงโปรแกรมการใช้ฟังก์ชัน  getchar( )

 /*          getchar1.c          */
#include<stdio.h>                                                                        
#include<conio.h>                                                                       
void main(void)                                                                             
{                                                                                                  
      char  cha;                                                                             
      clrscr( );                                                                                
      printf("Enter a single character : ");                                 
      cha = getchar( );                                                                
      printf("You type a character is ...%c \n",cha);
}                                                                              

ผลลัพธ์ที่ได้จากโปรแกรม
 
ฟังก์ชัน  getch( )
เป็นฟังก์ชันที่ใช้รับข้อมูลเพียง  1 ตัวอักขระเหมือนกับฟังก์ชัน getchar( )  แตกต่างกันตรงที่เมื่อใช้ฟังก์ชันนี้รับข้อมูล  ข้อมูลที่ป้อนเข้าไปจะไม่ปรากฏให้เห็นบนจอภาพและไม่ต้องกดแป้น  enter  ตาม 
รูปแบบการใช้งานฟังก์ชัน

getch( );
หรือ         char_var = getch( );
โดยที่
getch( )  คือ ฟังก์ชันที่ใช้รับข้อมูลเพียง  1  ตัวอักขระจากคีย์บอร์ด  โดยฟังก์ชันนี้จะไม่มี  argument  ดังนั้นอาจจะใช้  getch(void)  แทนคำว่า  getch( )  ก็ได้  แต่นิยมใช้  getch( )  มากกว่า
char_var  คือ  ตัวแปรชนิด  char  ซึ่งจะเก็บข้อมูล  1  ตัวอักขระที่ป้อนผ่านทางคีย์บอร์ด
โปรแกรมตัวอย่าง แสดงโปรแกรมการใช้ฟังก์ชัน  getch( ) 

 /*          getch1.c            */
#include<stdio.h>                                                                          
#include<conio.h>                                                                         
void main(void)                                                                              
{                                                                                                    
      char  ch;                                                                               
      clrscr( );                                                                                
      printf("Enter a single character : ");                                 
      ch = getch( );                                                                     
      printf("\nYou type a character is ...%c \n",ch);               
      getch( );                                                                            
}

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

 
ฟังก์ชัน  getche( )

เป็นฟังก์ชันที่ใช้รับข้อมูลจากคีย์บอร์ดเพียง  1 ตัวอักขระ เหมือนฟังก์ชัน getch( )  แตกต่างกันตรงที่ข้อมูลที่ป้อนเข้าไป จะปรากฏให้เห็นบนจอภาพด้วย  นอกนั้นมีการทำงาน และลักษณะการใช้งานเหมือนฟังก์ชัน  getch( )  ทุกประการ
รูปแบบการใช้งานฟังก์ชัน

getche( );
หรือ         char_var = getche( );
     
โดยที่
getche( )  คือ ฟังก์ชันที่ใช้รับข้อมูลเพียง  1  ตัวอักขระจากคีย์บอร์ด  โดยฟังก์ชันนี้จะไม่มี  argument  ดังนั้นอาจจะใช้  getche(void)  แทนคำว่า  getche( )  ก็ได้  แต่นิยมใช้  getche( )  มากกว่า
char_var  คือ  ตัวแปรชนิด  char  ซึ่งจะเก็บข้อมูล  1  ตัวอักขระที่ป้อนผ่านทางคีย์บอร์ด
โปรแกรมตัวอย่าง แสดงโปรแกรมการใช้ฟังก์ชัน  getche( ) 

 /*          getche1.c           */
#include<stdio.h>                                                                     
#include<conio.h>                                                                   
void main(void)                                                                         
{                                                                                               
      char  e;                                                                                 
      clrscr( );                                                                               
      printf("Enter a single character : ");                                 
      e = getche( );                                                                     
      printf("\nYou type a character is ...%c \n",e);                 
      getch( );                                                                           
}                                                                                            


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

ฟังก์ชัน  gets( )
เป็นฟังก์ชันที่ใช้รับข้อมูลชนิดข้อความ  (string)  จากคีย์บอร์ด  จากนั้นนำข้อมูลที่รับเข้าไปเก็บไว้ในตัวแปรสตริง  (string  variables)  ที่กำหนดไว้
รูปแบบการใช้งานฟังก์ชัน
 gets(string_var);
โดย
string_var  คือ  ตัวแปรสตริง  ซึ่งจะใช้เก็บข้อมูลชนิดข้อความ  (string  constant)
gets( )       คือ  ฟังก์ชันที่ใช้รับข้อความจากคีย์บอร์ด  แล้วไปเก็บไว้ในตัวแปรสตริง
โปรแกรมตัวอย่าง แสดงโปรแกรมการใช้ฟังก์ชัน  gets( )

 /*          gets1.c              /
#include<stdio.h>                                                                       
#include<conio.h>                                                                         
void main(void)                                                                              
{                                                                                                    
      char pro[50];                                                                       
      clrscr( );                                                                               
      printf("Enter your province : ");                                       
      gets(pro);                                                                            
      printf("Your province is ...%s\n", pro);                             
      getch( );                                                                              
}                                                                                                      


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

          สรุปข้อแนะนำการใช้ฟังก์ชันรับข้อมูล  (input  functions)
o    เมื่อต้องการรับค่าข้อมูล  string  ควรใช้ฟังก์ชัน  gets( )  หรือ  scanf( )
o    เมื่อต้องการรับตัวเลขหรือตัวอักษรเพียง  1  ตัว  ที่ไม่ต้องการเห็นบนจอภาพ  และไม่ต้องกดแป้น  enter  ควรใช้ฟังก์ชัน  getch( ) แต่ถ้าต้องการเห็นบนจอภาพด้วยควรใช้ฟังก์ชัน  getche( )
o    เมื่อต้องการรับข้อมูลตัวเลขที่มากกว่า  1  ตัว  เช่น  ตัวเลขจำนวนเต็มหรือตัวเลขทศนิยม  ควรใช้ฟังก์ชัน  scanf( )
o    กรณีที่ใช้ฟังก์ชัน  scanf( )  รับข้อมูลติดต่อกันมากกว่า  2  ครั้ง  อาจเกิดความผิดพลาดในการรับข้อมูล  ดังนั้นจึงควรใช้คำสั่ง  ch = getchar( );  คั่นก่อนที่จะรับข้อมูลครั้งที่  3  โดยจะต้องมีคำสั่งประกาศตัวแปร  char  ch;  ไว้ด้วย