หน่วยที่ 3  ฟังก์ชันพื้นฐานการเขียนโปรแกรมภาษา C

จากบทที่ 2 ได้กล่าวถึงรายละเอียดต่าง ๆ เกี่ยวกับความรู้เบื้องต้นเกี่ยวกับโปรแกรมภาษา C สำหรับบทนี้จะอธิบายถึงฟังก์ชันพื้นฐานสำหรับการเขียนโปรแกรมภาษา C เนื่องจากภาษา C มีฟังก์ชันให้ใช้งานมากมายแต่ในบทนี้จะกล่าวถึงฟังก์ชันพื้นฐานที่ใช้งานอยู่เป็นประจำในการเขียนโปรแกรมนั้นคือ ฟังก์ชันรับข้อมูลและฟังก์ชันแสดงผลข้อมูล โดยแต่ละฟังก์ชันมีรายละเอียดดังต่อไปนี้

3.1 ฟังก์ชันรับข้อมูล (input functions)

ในเนื้อหาฟังก์ชันการับข้อมูลของภาษา C มีฟังก์ชันที่ใช้ในการรับข้อมูลจากคีย์บอร์ด อยู่หลายฟังก์ชันที่จะกล่าวถึง ดังนี้คือ ฟังก์ชัน scanf( ), ฟังก์ชัน getchar( ), ฟังก์ชัน getch( ), ฟังก์ชัน getche( ) และฟังก์ชัน gets( ) ซึ่งแต่ละฟังก์ชันมีรายละเอียดของการใช้งานดังนี้

3.1.1 ฟังก์ชัน scanf( )

เป็นฟังก์ชันที่ใช้ในการรับข้อมูล จากคีย์บอร์ดเข้าไปเก็บไว้ในตัวแปรที่กำหนดไว ้โดยสามารถรับข้อมูลที่เป็นตัวเลขจำนวนเต็ม ตัวเลขทศนิยม ตัวอักขระตัวเดียว หรือข้อความก็ได

้ รูปแบบการใช้งานฟังก์ชัน

scanf(control string, argument list);

โดยที่ 

control string คือ รหัสรูปแบบข้อมูล (format code) โดยจะต้องเขียนอยู่ภายใต้เครื่องหมาย “……..” (double quotation)

argument list คือ ชื่อตัวแปรที่ใช้เก็บข้อมูลโดยจะต้องใช้เครื่องหมาย & (ampersand) นำหน้าชื่อตัวแปร ยกเว้นตัวแปรชนิด string ไม่ต้องมีเครื่องหมาย & นำหน้าชื่อ ถ้ามีตัวแปรมากกว่า 1 ตัวแปร ให้ใช้เครื่องหมาย , (comma) คั่นระหว่างตัวแปรแต่ละตัว

ตารางที่ 3.1 แสดงรหัสแบบข้อมูล ที่สามารถใช้ในฟังก์ชัน 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

ที่มา : Gottfried, S. Byron, 1990 : 481.

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน scanf( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.1, 3.2 และ 3.3 ดังต่อไปนี้

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

/* scanf1.c */ 

#include<stdio.h> /* บรรทัดที่ 1 */

void main(void) /* บรรทัดที่ 2 */

{ /* บรรทัดที่ 3 */

int a; /* บรรทัดที่ 4 */

scanf("%d", &a); /* บรรทัดที่ 5 */

} /* บรรทัดที่ 6 */

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

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 1 เป็นคำสั่งเรียกแฟ้มที่ชื่อว่า stdio.h ซึ่งภายในจะบรรจุคำสั่งหรือฟังก์ชันที่จำเป็นต้องใช้ในภาษา C เช่น printf( )

บรรทัดที่ 2 เป็นฟังก์ชันหลักของโปรแกรม และบอกให้ C compiler รู้ว่าฟังก์ชัน 

main( ) ไม่มีการส่งค่าข้อมูลและไม่มีการรับค่าข้อมูลกลับ

บรรทัดที่ 3 เป็นการแสดงจุดเริ่มต้นของฟังก์ชัน main( )

บรรทัดที่ 4 เป็นการประกาศตัวแปรชื่อ a เป็นชนิดจำนวนเต็ม หรือ int

บรรทัดที่ 5 ฟังก์ชัน scanf( ) เพื่อรอรับข้อมูลจากคีย์บอร์ดเข้าไปเก็บไว้ในตัวแปร a ซึ่งเป็นชนิดจำนวนเต็ม

บรรทัดที่ 6 เป็นการแสดงจุดสิ้นสุดของฟังก์ชัน main( )

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

/* scanf2.c */

#include<stdio.h> /* บรรทัดที่ 1 */

void main(void) /* บรรทัดที่ 2 */

{ /* บรรทัดที่ 3 */

int a; /* บรรทัดที่ 4 */

scanf("%d", &a); /* บรรทัดที่ 5 */

printf("Your enter is ...%d", a); /* บรรทัดที่ 6 */

} /* บรรทัดที่ 7 */

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

ข้อสังเกต ในเอกสารเล่มนี้ ผลลัพธ์ที่ได้จากโปรแกรม ถ้าตัวอักษรที่เป็นสีเข้มคือข้อความที่ให้ผู้ใช้พิมพ์ผ่านคีย์บอร์ด 

คำอธิบายโปรแกรม 

ในโปรแกรมตัวอย่างที่ 3.2 โปรแกรมจะรับข้อมูลจากคีย์บอร์ด ที่เป็นชนิดจำนวนเต็มเก็บไว้ในตัวแปร และนำค่าของตัวแปรแสดงผลออกจอภาพ ด้วยคำสั่งบรรทัดที่ 6 คือ printf(“Your enter is…%d”, a); สำหรับฟังก์ชัน printf( ) ผู้ใช้สามารถศึกษารายละเอียดเพิ่มเติมก่อนได้ในหัวข้อ 3.2.1 

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

/* scanf3.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ char name[50]; /* บรรทัดที่ 4 */

int age; /* บรรทัดที่ 5 */

float weight, height; /* บรรทัดที่ 6 */

clrscr( ); /* บรรทัดที่ 7 */

printf("Enter your Name and Age: "); /* บรรทัดที่ 8 */

scanf("%s %d", name, &age); /* บรรทัดที่ 9 */

printf("Enter your Weight and Height : "); /* บรรทัดที่ 10 */

scanf("%f %f", &weight, &height); /* บรรทัดที่ 10 */

printf("\nYour name is ...%s.\n",name); /* บรรทัดที่ 11 */

printf("You are %d years old.\n",age); /* บรรทัดที่ 13 */

printf("Your weight is ...%f cm.\n",weight); /* บรรทัดที่ 14 */

printf("Your height is ...%f cm.\n",height); /* บรรทัดที่ 15 */

} /* บรรทัดที่ 16 */

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.3 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังต่อไปนี้

บรรทัดที่ 4 เป็นการชุดชนิด char ซึ่งจองไว้ 50 ตัวอักษร (เรื่องตัวแปรชุดได้อธิบายรายละเอียดไว้ในบทที่ 5)

บรรทัดที่ 7 ฟังก์ชัน clrscr( ) ใช้ลบข้อความใด ๆ ออกจากจอภาพ ซึ่งจะเรียกใช้งานควบคู่กับแฟ้มที่ชื่อ conio.h ดังนั้นก่อนฟังก์ชัน main( ) จึงต้องเรียกใช้ #include <conio.h> ก่อน (บรรทัดที่ 2)

บรรทัดที่ 8 จะแสดงข้อความและรอรับค่า Name และ Age จากผู้ใช้ ดังนั้นเวลาเติมข้อมูลให้เว้นช่องว่างอย่างน้อย 1 ช่อง เพื่อแยกข้อมูล Name กับ Age 

บรรทัดที่ 9 จะรับข้อมูลจากคีย์บอร์ด 2 ค่า มาเก็บไว้ในตัวแปร name เป็นข้อความ และเก็บในตัวแปร age เป็นตัวเลขจำนวนเต็ม

บรรทัดที่ 10 จะทำงานคล้ายกับบรรทัดที่ 8 แต่จะรับข้อมูลที่เป็นตัวเลขทศนิยม

บรรทัดที่ 11 – 15 จะนำข้อมูลที่เก็บไว้ในตัวแปรต่าง ๆ ออกมาแสดงผลที่จอภาพตามรหัสรูปแบบข้อมูลต่าง ๆ

3.1.2 ฟังก์ชัน getchar( )

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

รูปแบบการใช้งานฟังก์ชัน

getchar( );

หรือ char_var = getchar( );

โดยที่

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

char_var คือ ตัวแปรชนิด char ซึ่งจะเก็บข้อมูล 1 ตัวอักขระที่ป้อนผ่านทางคีย์บอร์ด

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน getchar( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.4 ดังต่อไปนี้

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

/* getchar1.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

char cha; /* บรรทัดที่ 5 */

clrscr( ); /* บรรทัดที่ 6 */

printf("Enter a single character : "); /* บรรทัดที่ 7 */

cha = getchar( ); /* บรรทัดที่ 8 */

printf("You type a character is ...%c \n",cha); /* บรรทัดที่ 9 */

} /* บรรทัดที่ 10 */

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.4 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังต่อไปนี้

บรรทัดที่ 1 เรียกใช้แฟ้มที่ชื่อ stdio.h ซึ่งในโปรแกรมนี้จะใช้คู่กับฟังก์ชัน printf( ) ในบรรทัดที่ 7 และ 9 

บรรทัดที่ 2 เรียกใช้แฟ้มที่ชื่อ conio.h ซึ่งใช้คู่กับฟังก์ชัน clrscr( ) เพื่อลบข้อมูลที่จอภาพในบรรทัดที่ 6 

บรรทัดที่ 5 ประกาศตัวแปรชื่อ cha เป็นชนิดตัวอักขระ หรือ char

บรรทัดที่ 8 รับข้อมูล 1 ตัวอักขระจากคีย์บอร์ด แล้วนำค่าที่รับมาเก็บไว้ในตัวแปร cha

บรรทัดที่ 9 นำข้อมูลที่เก็บในตัวแปร cha มาแสดงตรงตำแหน่ง %c และขึ้นบรรทัดใหม่ (\n คือ new line)

3.1.3 ฟังก์ชัน getch( )

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

รูปแบบการใช้งานฟังก์ชัน

getch( );

หรือ char_var = getch( );

โดยที่

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

char_var คือ ตัวแปรชนิด char ซึ่งจะเก็บข้อมูล 1 ตัวอักขระที่ป้อนผ่านทางคีย์บอร์ด

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน getch( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.5 ดังต่อไปนี้

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

/* getch1.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

char ch; /* บรรทัดที่ 5 */

clrscr( ); /* บรรทัดที่ 6 */

printf("Enter a single character : "); /* บรรทัดที่ 7 */

ch = getch( ); /* บรรทัดที่ 8 */

printf("\nYou type a character is ...%c \n",ch); /* บรรทัดที่ 9 */

getch( ); /* บรรทัดที่ 10 */

}

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

คำอธิบายโปรแกรม 

การทำงานของโปรแกรมตัวอย่างที่ 3.5 จะคล้ายกับโปรแกรมตัวอย่างที่ 3.4 ต่างกันตรงคำสั่งบรรทัดที่ 8 จะเป็นการใช้ฟังก์ชัน getch( ) คือ ch = getch( ); ให้นำค่าที่รับมาเก็บไว้ในตัวแปร ch ซึ่งเวลาเรารับข้อมูลจากคีย์บอร์ดจะไม่ปรากฎข้อมูลที่เราป้อนเข้าไปให้เห็นบนจอภาพ และไม่ต้องกด enter ตาม โปรแกรมก็จะไปทำงานคำสั่งบรรทัดที่ 9 คือ นำข้อมูลที่เก็บในตัวแปร ch มาแสดงตรงตำแหน่ง %c และขึ้นบรรทัดใหม่ ส่วนคำสั่งบรรทัดที่ 10 ฟังก์ชัน getche( ); โปรแกรมก็จะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น เรากด enter ก็จะกลับเข้าสู่โปรแกรม

3.1.4 ฟังก์ชัน getche( )

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

รูปแบบการใช้งานฟังก์ชัน

getche( );

หรือ char_var = getche( );

โดยที่

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

char_var คือ ตัวแปรชนิด char ซึ่งจะเก็บข้อมูล 1 ตัวอักขระที่ป้อนผ่านทางคีย์บอร์ด

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน getche( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.6 ดังต่อไปนี้

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

/* getche1.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

char e; /* บรรทัดที่ 5 */

clrscr( ); /* บรรทัดที่ 6 */

printf("Enter a single character : "); /* บรรทัดที่ 7 */

e = getche( ); /* บรรทัดที่ 8 */

printf("\nYou type a character is ...%c \n",e); /* บรรทัดที่ 9 */

getch( ); /* บรรทัดที่ 10 */

} /* บรรทัดที่ 11 */

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

คำอธิบายโปรแกรม 

การทำงานของโปรแกรมตัวอย่างที่ 3.6 จะคล้ายกับโปรแกรมตัวอย่างที่ 3.5 ต่างกันตรงคำสั่งบรรทัดที่ 8 จะเป็นการใช้งานฟังก์ชัน getche( ) คือ e = getche( ); คำสั่งนี้ให้นำค่าที่รับมาเก็บไว้ในตัวแปร e ซึ่งข้อมูลที่เติมเข้าไปจะปรากฎให้เห็นบนจอภาพด้วย แต่ไม่ต้องกด enter ตาม โปรแกรมก็จะไปทำงานคำสั่งบรรทัดที่ 9 คือ นำข้อมูลที่เก็บในตัวแปร e มาแสดงตรงตำแหน่ง %c และขึ้นบรรทัดใหม่ ส่วนคำสั่งบรรทัดที่ 10 getch( ); โปรแกรมก็จะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น เรากด enter ก็จะกลับเข้าสู่โปรแกรม 

3.1.5 ฟังก์ชัน gets( )

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

รูปแบบการใช้งานฟังก์ชัน

gets(string_var);

โดย

string_var คือ ตัวแปรสตริง ซึ่งจะใช้เก็บข้อมูลชนิดข้อความ (string constant)

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

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน gets( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.7 ดังต่อไปนี้

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

/* gets1.c /

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

char pro[50]; /* บรรทัดที่ 5 */

clrscr( ); /* บรรทัดที่ 6 */

printf("Enter your province : "); /* บรรทัดที่ 7 */

gets(pro); /* บรรทัดที่ 8 */

printf("Your province is ...%s\n", pro); /* บรรทัดที่ 9 */

getch( ); /* บรรทัดที่ 10 */

} /* บรรทัดที่ 11 */

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

คำอธิบายโปรแกรม 

โปรแกรมตัวอย่างที่ 3.7 เป็นโปรแกรมที่รอรับการเติมชื่อจังหวัด แล้วนำไปเก็บไว้ในตัวแปร pro ด้วยคำสั่งบรรทัดที่ 8 คือ gets(pro); แล้วนำค่าที่เก็บไว้ในตัวแปร pro ออกมาแสดงตรงตำแหน่ง %s และขึ้นบรรทัดใหม่ ส่วนคำสั่งบรรทัดที่ 10 getch( ); โปรแกรมก็จะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น เรากด enter ก็จะกลับเข้าสู่โปรแกรม 

สรุปข้อแนะนำการใช้ฟังก์ชันรับข้อมูล (input functions)

เมื่อต้องการรับค่าข้อมูล string ควรใช้ฟังก์ชัน gets( ) หรือ scanf( )

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

เมื่อต้องการรับข้อมูลตัวเลขที่มากกว่า 1 ตัว เช่น ตัวเลขจำนวนเต็มหรือตัวเลขทศนิยม ควรใช้ฟังก์ชัน scanf( )

กรณีที่ใช้ฟังก์ชัน scanf( ) รับข้อมูลติดต่อกันมากกว่า 2 ครั้ง อาจเกิดความผิดพลาดในการรับข้อมูล ดังนั้นจึงควรใช้คำสั่ง ch = getchar( ); คั่นก่อนที่จะรับข้อมูลครั้งที่ 3 โดยจะต้องมีคำสั่งประกาศตัวแปร char ch; ไว้ด้วย

 

 

 

3.2 ฟังก์ชันแสดงผลข้อมูล (output functions)

ในเนื้อหาฟังก์ชันการแสดงผลข้อมูลของภาษา C มีฟังก์ชันที่ใช้ในการแสดงผลลัพธ์ออกทางจอภาพอยู่หลายฟังก์ชันที่จะกล่าวถึง ดังนี้คือ ฟังก์ชัน printf( ), ฟังก์ชัน putchar( ) และฟังก์ชัน puts( ) ซึ่งแต่ละฟังก์ชันมีรายละเอียดของการใช้งานดังนี้

3.2.1 ฟังก์ชัน printf( )

เป็นฟังก์ชันที่ใช้ในการแสดงผลลัพธ์ออกทางจอภาพ โดยสามารถกำหนดรหัสรูปแบบข้อมูล (format code) และรหัสควบคุม (control code) ให้เหมาะสมกับข้อมูลและรูปแบบผลลัพธ์ที่ต้องการ (ดังแสดงในตารางที่ 3.2 และ 3.3)

รูปแบบการใช้งานฟังก์ชัน 

printf(control string, argument list);

โดยที่

control string คือ รหัสรูปแบบข้อมูลที่ใช้ในการพิมพ์ผลลัพธ์ใช้รหัสเหมือนฟังก์ชัน scanf( ) และในฟังก์ชัน printf( ) นี้ยังสามารถใช้รหัสควบคุมเพื่อช่วยจัดรูปแบบการพิมพ์ผลลัพธ์ให้สวยงามขึ้น โดยที่ control string จะต้องเขียนอยู่ภายใต้เครื่องหมาย “………” (double quotation) เช่นเดียวกับฟังก์ชัน scanf( )

argument list คือ ค่าคงที่ หรือตัวแปร หรือนิพจน์ ในกรณีที่มีค่าคงที่ ตัวแปร หรือนิพจน์หลาย ๆ ค่าให้ใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่ ตัวแปร หรือนิพจน์แต่ละค่า 

ตารางที่ 3.2 แสดงรหัสรูปแบบข้อมูลที่สามารถใช้ในฟังก์ชัน printf( )

รหัสรูปแบบ 

(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

%p ใช้แสดงค่า address ของตัวแปรพอย์นเตอร์

ที่มา : Gottfried, S. Byron, 1990 : 481.

ตารางที่ 3.3 แสดงรหัสควบคุมข้อมูลที่สามารถใช้ในฟังก์ชัน printf( )

รหัสควบคุม

(control code) ความหมาย ค่า ASCII

\a Bell 007

\b Backspace 008

\t Horizontal tab 009

\n Newline (line feed) 010

\v Vertical tab 011

\f From feed 012

\r Carriage return 013

\” Quotation mark (“) 034

\’ Apostrophe (‘) 039

\? Question mark (?) 063

\\ Backslash (\) 092

\0 Null (ศูนย์) 000

\ooo Octal number (o) -

\xhh Hexadecimal number (h) -

ที่มา : Gottfried, S. Byron, 1990 : 474.

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน printf( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.8, 3.9 และ 3.10 ดังต่อไปนี้

โปรแกรมตัวอย่างที่ 3.8 แสดงโปรแกรมการใช้ฟังก์ชัน printf( ) พิมพ์ข้อความออกแสดงที่จอภาพ 

/* printf1.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

clrscr( ); /* บรรทัดที่ 5 */

printf("Welcome to Thailand !!!"); /* บรรทัดที่ 6 */

getch( ); /* บรรทัดที่ 7 */

} /* บรรทัดที่ 8 */

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.8 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังต่อไปนี้

บรรทัดที่ 6 คำสั่ง printf(“Welcome to Thailand !!!”); เป็นคำสั่งที่นำข้อความ Welcome to Thailand !!! แสดงที่จอภาพ และหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

โปรแกรมตัวอย่างที่ 3.9 แสดงโปรแกรมการใช้ฟังก์ชัน printf( ) ควบคู่กับ รหัสรูปแบบ %c และ %s เพื่อแสดงข้อมูลที่จอภาพ

/* printf2.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

char ch='A'; /* บรรทัดที่ 5 */

char str[]="Computer"; /* บรรทัดที่ 6 */

clrscr( ); /* บรรทัดที่ 7 */

printf("%5c \t\tCHARACTER %s", ch, str); /* บรรทัดที่ 8 */

getch( ); /* บรรทัดที่ 9 */ 

} /* บรรทัดที่ 10 */

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.9 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังต่อไปนี้

บรรทัดที่ 5 ประกาศตัวแปรชนิดอักขระ ชื่อ ch ให้เก็บตัวอักษร A 

บรรทัดที่ 6 ประกาศตัวแปรชุดชนิดอักขระ ชื่อ str ให้เก็บข้อความ Computer

บรรทัดที่ 8 ให้นำค่าของตัวแปร ch มาแสดงตรงตำแหน่ง %c ก่อนแสดงให้เว้นช่องว่าง 5 ช่อง และพบ \t \t คือให้เว้น tab ไป 2 ครั้ง (tab 1 ครั้ง มี 8 ช่องว่าง) แล้วค่อยพิมพ์ข้อความ CHARACTER และนำข้อความที่เก็บในตัวแปร str มาแสดงตรงตำแหน่ง %s แล้วหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม 

โปรแกรมตัวอย่างที่ 3.10 แสดงโปรแกรมการใช้ฟังก์ชัน printf( ) ควบคู่กับ รหัสรูปแบบ %d, %c, %s และ %f เพื่อแสดงข้อมูลที่จอภาพ 

/* printf3.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

int a=5, b=2; /* บรรทัดที่ 5 */

char c='D', d='F'; /* บรรทัดที่ 6 */

char e[20]="Thailand"; /* บรรทัดที่ 7 */

float f = 9.5 , g; /* บรรทัดที่ 8 */

clrscr( ); /* บรรทัดที่ 9 */

b+=a; d+=5; g = f + 2.5; /* บรรทัดที่ 10 */

printf("%5d \t%-5d\n",a, b); /* บรรทัดที่ 11 */

printf("%3c \t%-3c\n",c--, ++d); /* บรรทัดที่ 12 */

printf("%s\n",e); /* บรรทัดที่ 13 */

printf("%.3f \t%-.3f\n", f+2, g); /* บรรทัดที่ 14 */

getch( ); /* บรรทัดที่ 15 */

} /* บรรทัดที่ 16 */

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.10 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังต่อไปนี้

บรรทัดที่ 10 คำสั่ง b+ = a คือ b = b + a เพราะฉนั้น b = 2 + 5 = 7

คำสั่ง d+ = 5 คือ d = d + 5 เพราะฉนั้น d = ‘K’

คำสั่ง g = f + 2.5 คือ g = 9.5 + 2.5 = 12.0

บรรทัดที่ 11 ใช้ฟังก์ชัน printf( ) พิมพ์ข้อมูลชนิด int ของตัวแปร a และ b โดยใช้รัสควบคุม เป็น %d สำหรับตัวเลข 5 เป็นการบอกให้เว้นช่องว่าง 5 ช่องก่อนแล้วค่อยนำค่าตัวแปร a มาแสดง ส่วนเครื่องหมาย – หน้าตัวเลขเป็นการบอกให้พิมพ์ตัวเลขชิดซ้าย สำหรับรูปแบบการแสดงตัวแปร b 

บรรทัดที่ 12 ใช้ฟังก์ชัน printf( ) พิมพ์ข้อมูลชนิด char โดยใช้รหัสควบคุม %c ของตัวแปร c ก่อนแล้วค่อยลดค่าตัวแปรลง 1 และ ++d คือ เพิ่มค่าตัวแปร d ขึ้น 1 ค่าก่อนแล้วค่อยแสดงผลออกจอภาพ

บรรทัดที่ 13 ใช้ฟังก์ชัน printf( ) พิมพ์ข้อมูลชนิด string โดยใช้รหัสควบคุม %s ของตัวแปร e ออกจอภาพ

บรรทัดที่ 14 ใช้ฟังก์ชัน printf( ) พิมพ์ข้อมูลชนิด float โดยใช้รหัสควบคุม %f ของตัวแปร f + 2 คือ 11.500 (%3f คือ ทศนิยม 3 ตำแหน่ง) และแสดงค่าตัวแปร g ออกจอภาพ แล้วหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

3.2.2 ฟังก์ชัน putchar( )

เป็นฟังก์ชันที่ใช้ในการแสดงผลลัพธ์ออกจอภาพทีละ 1 ตัวอักขระ โดยลักษณะของฟังก์ชันนี้เป็นฟังก์ชันที่ต้องการ argument 1 ค่าที่เป็นข้อมูลชนิด single character (char)

รูปแบบการใช้งานฟังก์ชัน

putchar(char_argument);

โดยที่

putchar( ) คือ ฟังก์ชันที่ใช้แสดงผลลัพธ์ทีละ 1 ตัวอักขระออกทางจอภาพ

char_argument คือ ตัวแปรชนิด single character (char)

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน putchar( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.11 และ 3.12 ดังต่อไปนี้

โปรแกรมตัวอย่างที่ 3.11 แสดงโปรแกรมการใช้ฟังก์ชัน putchar( ) เพื่อแสดงข้อมูลออกจอภาพ

/* putchar1.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

char p; /* บรรทัดที่ 5 */

clrscr( ); /* บรรทัดที่ 6 */

printf("Enter a single character :"); /* บรรทัดที่ 7 */

p=getche( ); /* บรรทัดที่ 8 */

printf("\nYour character is ...%c"); /* บรรทัดที่ 9 */

putchar(p); /* บรรทัดที่ 10 */

getch( ); /* บรรทัดที่ 11 */

} /* บรรทัดที่ 12 */

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.11 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังต่อไปนี้

บรรทัดที่ 8 ใช้ฟังก์ชัน getche( ) โดยนำค่าที่รับจากคีย์บอร์ดไปเก็บไว้ในตัวแปร p

บรรทัดที่ 10 ใช้ฟังก์ชัน putchar( ) โดยนำค่าที่เก็บไว้ในตัวแปร p ออกแสดงผลที่จอภาพตรงตำแหน่ง %c ในฟังก์ชัน printf( ) ของบรรทัดที่ 9 แล้วหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

โปรแกรมตัวอย่างที่ 3.12 แสดงโปรแกรมการใช้ฟังก์ชัน putchar( ) เพื่อแสดงข้อมูลออกจอภาพ และแทรกด้วยการใช้ฟังก์ชัน printf( ) ก่อนนำข้อมูลออกแสดงผล 

/* putchar2.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

char p; /* บรรทัดที่ 5 */

clrscr( ); /* บรรทัดที่ 6 */

printf("Enter a single character : "); /* บรรทัดที่ 7 */

p=getche( ); /* บรรทัดที่ 8 */

printf("\nThank you !!!"); /* บรรทัดที่ 9 */

printf("\nYour character is ...%c"); /* บรรทัดที่ 10 */

putchar(p); /* บรรทัดที่ 11 */

getch( ); /* บรรทัดที่ 12 */

} /* บรรทัดที่ 13 */

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

คำอธิบายโปรแกรม 

โปรแกรมตัวอย่างที่ 3.12 จะทำงานคล้ายกับโปรแกรมตัวอย่างที่ 3.11 โดยการเก็บค่าที่รับจากคีย์บอร์ดไว้ในตัวแปร แล้วนำค่าที่เก็บไว้ในตัวแปรออกแสดงผลด้วยฟังก์ชัน putchar( ) ซึ่งก่อนจะแสดงผลมีการใช้ฟังก์ชัน printf( ) พิมพ์ข้อความ Thank you !!! ออกมาแทรกก่อน 1 บรรทัด แล้วหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

3.2.3 ฟังก์ชัน puts( )

เป็นฟังก์ชันที่พิมพ์ข้อความออกแสดงทางจอภาพ โดยลักษณะของฟังก์ชันนี้เป็นฟังก์ชันที่ต้องการ argument 1 ค่าที่เป็นชนิดข้อความ (string constant)

รูปแบบการใช้งานฟังก์ชัน

puts(string_argument);

โดยที่

puts( ) คือ ฟังก์ชันที่ใช้พิมพ์ข้อความออกทางจอภาพ 

string_argument คือ ค่าคงที่ชนิดสตริง (string constant) ซึ่งค่าคงที่สตริงนี้จะถูกพิมพ์ออกแสดงทางจอภาพผ่านฟังก์ชัน puts( )

เพื่อให้เกิดความเข้าใจการใช้งานฟังก์ชัน puts( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 3.13 ดังต่อไปนี้

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

/* puts1.c /

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

void main(void) /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

clrscr( ); /* บรรทัดที่ 5 */

printf("Computer Programming Language 1"); /* บรรทัดที่ 6 */

puts(" is your course." ); /* บรรทัดที่ 7 */

getch( ); /* บรรทัดที่ 8 */

} /* บรรทัดที่ 9 */

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

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 3.13 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังต่อไปนี้

บรรทัดที่ 6 ใช้ฟังก์ชัน printf( ) พิมพ์ข้อความออกจอภาพ คือ Computer Programming Language 1 แสดงที่จอภาพ

บรรทัดที่ 7 ใช้ฟังก์ชัน puts( ) พิมพ์ข้อความ is your course. ต่อท้ายของฟังก์ชัน printf( ) ในบรรทัดที่ 6 จะได้ Computer Programming Language 1 is your course. แล้วหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

3.3 สรุปท้ายบท

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

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

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

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

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

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

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