เริ่มต้นกับภาษาซี
ใบความรู้ที่ 4 เรื่อง เริ่มต้นกับภาษาซี
ใบงานที่ 4 เรื่อง เริ่มต้นกับภาษาซี
การแก้ปัญหาด้วยคอมพิวเตอร์นั้น หลังจากที่ได้วิเคราะห์ปัญหาจนได้ขั้นตอนวิธีในการแก้ปัญหา ซึ่งอาจอยู่ในรูปแบบรหัสลำลอง หรือผังงาน ขั้นตอนต่อไปคือการเขียนโปรแกรมคอมพิวเตอร์ขึ้นเพื่อแก้ปัญหาตามขั้นตอนที่ได้วางแผนไว้ แต่เนื่องจากคอมพิวเตอร์จะรับรู้คำสั่งที่เป็นภาษาเครื่องเท่านั้น และมนุษย์ไม่สามารถเขียนโปรแกรมภาษาเครื่องได้โดยตรง เนื่องจากไม่สะดวก ยากต่อการทำความเข้าใจ จึงได้มีการสร้างภาษาคอมพิวเตอร์ระดับสูงขึ้นมาเพื่อให้ง่ายต่อการเขียนโปรแกรม ผู้เขียนโปรแกรมไม่จำเป็นต้องเรียนรู้การทำงาน และโครงสร้างภายในของเครื่องคอมพิวเตอร์ ก็สามารถเขียนโปรแกรมได้ โดยต้องผ่านการแปลให้เป็นภาษาเครื่องก่อนที่จะใช้สั่งงานคอมพิวเตอร์ได้
ภาษาซีถูกสร้างขึ้นในช่วงปี พ.ศ. 2510 โดยนักคอมพิวเตอร์ ชื่อ นายเดนนิส ริชชี่ (Dennis Ritchie) จากห้องทดลองของเบลล์ (Bell Laboratories) ประเทศสหรัฐอเมริกา วัตถุประสงค์หลักในการพัฒนาคือ เพื่อใช้ในการสร้างระบบปฏิบัติการยูนิกส์ (UNIX) ที่เป็นต้นแบบของระบบปฏิบัติการตระกูลลินุกซ์ทั้งหลายในปัจจุบัน นอกจากนี้ภาษาซียังถูกนำไปใช้ในการสร้างโปรแกรมที่ทำงานเกี่ยวข้องโดยตรงกับระบบคอมพิวเตอร์ เช่น โปรแกรมประมวลคำ โปรแกรมตารางทำงาน โปรแกรมจัดการพื้นที่ของดิสก์ และโปรแกรมป้องกันและตรวจสอบไวรัส เนื่องจากภาษาซีมีความยืดหยุ่นสูง สามารถเขียนให้ใกล้เคียงกับภาษาระดับต่ำ ทำให้มีประสิทธิภาพในการทำงานสูง ผู้พัฒนาสามารถที่จะพัฒนาโปรแกรมได้ โดยเน้นไปที่การแก้ปัญหาที่ต้องการได้อย่างอิสระโดยไม่ต้องคำนึงถึงฮาร์ดแวร์ใด ๆ
ภาษาซีเป็นโปรแกรมระดับสูง ที่ใช้สำหรับเขียนโปรแกรมประยุกต์ต่างๆ เช่น เดียวกันกับภาษาปาสคาล ภาษาเบสิก และภาษาฟอร์แทรน เป็นต้น นอกจากนี้ภาษาซียังใช้สำหรับเขียนโปรแกรมระบบ และโปรแกรมสำหรับควบคุมฮาร์ดแวร์บางส่วนที่โปรแกรมระดับสูงหลายภาษาไม่สามารถทำได้
ก่อนที่โปรแกรมภาษาซีจะถูกรัน (run) จะต้องถูกแปลงให้อยู่ในรูปของ อ็อบเจกต์โค้ด[1] (object code) โดยการคอมไพล์[2] (compile)โปรแกรมภาษาซีที่เขียนโดยใช้คำสั่งตามมาตรฐานของ ANSI C สามารถนำไปคอมไพล์ และรันที่เครื่องคอมพิวเตอร์ต่างระบบกันได้
[1] อ๊อบเจกต์โค้ด หมายถึง รหัสเครื่อง (machine code) ที่ถูกสร้างขึ้นจากโปรแกรมรหัสต้นฉบับ ซึ่งอาจสามารถรันได้ทันทีหรือต้องเชื่อมโยงกับอ๊อบเจกต์โค้ดอื่น เช่น ไลบรารี ก่อนจึงจะสามารถรันได้
[2] การคอมไพล์ เป็นกระบวนการในการแปลงโปรแกรมรหัสต้นฉบับเป็นรหัสเครื่อง โดยมีคอมไพเลอร์ของภาษาโปรแกรมเป็นตัวดำเนินการ
1. การคอมไพล์และรันโปรแกรม
โปรแกรมที่เขียนขึ้นโดยใช้ภาษาโปรแกรมต่างๆ นั้น เรียกว่า รหัสต้นฉบับ (source code) ซึ่งอยู่ในรูปของข้อความตามหลักการเขียนโปรแกรมของภาษาโปรแกรมที่สามารถอ่าน และทำความเข้าใจได้
โดยมนุษย์เท่านั้น ดังนั้นเพื่อให้เครื่องคอมพิวเตอร์สามารถเข้าใจโปรแกรมและปฏิบัติ จึงต้องนำรหัสต้นฉบับมาผ่านกระบวนการแปลงให้อยู่ในรูปของ อ็อบเจกต์โค้ด ที่ประกอบด้วยรหัสตัวเลข 0 และ 1 ก่อน เราเรียกกระบวนการแปลงดังกล่าวว่า การคอมไพล์โปรแกรม
ดังนั้น โปรแกรมจะต้องถูกคอมไพล์ด้วยคอมไพเลอร์ภาษาซี ( C compiler) เพื่อให้ได้
อ็อบเจกต์โค้ดก่อนจึงจะสามารถรันได้ นอกจากคอมไพล์ และรันโปรแกรมยังมีกระบวนการอื่นที่เกี่ยวข้อง
ก่อนที่คอมไพเลอร์ภาษาซีจะแปลงรหัสต้นฉบับให้อยู่ในอ็อบเจกต์โค้ด ตัวประมวลผลก่อนซี
(C preprocessor) จะถูกรันโดยอัตโนมัติ ในขั้นตอนนี้จะมีการดำเนินการต่างๆตามคำสั่งของ
ตัวประมวลผลก่อนซี เช่น การอ่านแฟ้มส่วนหัว (header files) ต่างๆ เพื่อให้ถูกประมวลผลร่วมกับโปรแกรม เมื่อมีการใช้คำสั่ง #include หรือการแทนที่ข้อความด้วยค่าที่กำหนดให้เมื่อมีการใช้คำสั่ง #define เป็นต้น
หลังจากโปรแกรมถูกคอมไพล์ อ็อบเจกต์โค้ดจะถูกเชื่อมโยงโดยโปรแกรมเชื่อมโยง (linker) เข้ากับส่วนของรหัสคำสั่ง (code) ที่อ้างอิงโดยโปรแกรม แต่ไม่ได้เป็นส่วนหนึ่งของโปรแกรม เช่น ไลบรารีมาตรฐาน (standard library) ต่างๆ เป็นต้น เพื่อให้อ็อบเจกต์โค้ดมีความสมบูรณ์ เกิดเป็นโปรแกรมที่สามารถรันได้ (executable program)
ในขั้นตอนสุดท้าย โปรแกรมที่สามารถรันได้จะถูกนำเข้าสู่หน่ายความจำของเครื่องคอมพิวเตอร์โดยโปรแกรมบรรจุ (loader) จากนั้นการรันโปรแกรมจึงเริ่มต้นขึ้น ซึ่งผลที่ได้จากการรันโปรแกรมขึ้นอยู่กับคำสั่งในโปรแกรมที่ปรากฏอยู่ในรหัสต้นฉบับที่เขียนโปรแกรมนั่นเอง
2. โครงสร้างพื้นฐานของโปรแกรมภาษาซี
โครงสร้างพื้นฐานของโปรแกรมภาษาซี จะต้องประกอบด้วยโปรแกรมย่อย หรือเรียกว่า ฟังก์ชัน (function) อย่างน้อย 1 ฟังก์ชัน คือ ฟังก์ชัน main ( ) ซึ่งมีรูปแบบดังนี้
int main ( ) { / / ส่วนหัวของฟังก์ชัน การประกาศตัวแปรท้องถิ่น / / ส่วนการประกาศตัวแปร คำสั่งต่าง ๆ ; / / ส่วนคำสั่ง } |
รูปแสดง โครงสร้างพื้นฐานของโปรแกรมภาษาซี
ฟังก์ชัน main ( ) ประกอบด้วย 3 ส่วนหลัก คือ
1) ส่วนหัวของฟังก์ชัน ประกอบด้วย ชนิดข้อมูล ชื่อฟังก์ชัน main ตามด้วยเครื่องหมาย ( และ ) ตามลำดับ สำหรับชนิดข้อมูล เป็นการระบุว่าฟังก์ชันนี้จะส่งค่ากลับไปให้กับฟังก์ชันผู้เรียกเป็นข้อมูลชนิดใด โดยทั่วไปแล้วสำหรับฟังก์ชัน main() จะส่งค่ากลับเป็นชนิดข้อมูลจำนวนเต็ม หรือ int
2) ส่วนการประกาศตัวแปร ใช้สำหรับประกาศตัวแปรชนิดต่างๆ เพื่อเก็บข้อมูลระหว่างการประมวลผล
3) ส่วนคำสั่ง ประกอบด้วยคำสั่งที่เกี่ยวข้องกับการรับเข้าและการแสดงข้อมูล คำสั่งประมวลผลอื่นๆ รวมถึงการเรียกใช้ฟังก์ชันอื่นได้ด้วย
ส่วนประกาศตัวแปรและส่วนคำสั่งจะต้องเขียนอยู่ระหว่างเครื่องหมาย { และ } เสมอ ทั้งสองส่วนนี้ ใช้สำหรับนิยามการทำงานของฟังก์ชัน main ( ) และคำสั่งทุกคำสั่งในภาษาซีจะต้องปิดท้ายด้วยเครื่องหมาย ; (semicolon) เสมอ
ตัวอย่างที่ 1 โปรแกรมภาษาซีที่สมบูรณ์ที่เล็กที่สุด คือ
int main()
{
}
ในโปรแกรมนี้ ประกอบด้วยฟังก์ชัน main() เพียงหนึ่งฟังก์ชัน ซึ่งจำเป็นต้องมีในภาษาซีและจากรูปแบบของการประกาศฟังก์ชัน จะต้องมีวงเล็บปีกกาเปิด และปิด เพื่อแสดงถึงตัวฟังก์ชัน โดยที่ไม่จำเป็นต้องมีคำสั่งใด ๆ เลยก็ได้ ดังนั้นโปรแกรมนี้จึงเป็นโปรแกรมที่สมบูรณ์ แต่ไม่ได้ทำงานใด ถ้าคอมไพล์และรันโปรแกรมนี้ พบว่าโปรแกรมจบการทำงานทันที โดยไม่มีการรับข้อมูลหรืแสดงผลใด ๆ
3. ชนิดของข้อมูล
ภาษาซี เป็นภาษาหนึ่งที่มีชนิดของข้อมูลให้ใช้งานหลายอย่างด้วยกัน ซึ่งชนิดของข้อมูลแต่ละอย่างมีขนาดเนื้อที่ที่ใช้ในหน่วยความจำที่แตกต่างกัน ดังนั้นในการเลือกใช้งานชนิดข้อมูลก็ควรจะคำนึงถึง
ความจำเป็นในการใช้งานด้วย สำหรับชนิดของข้อมูล มีดังนี้คือ
1. ข้อมูลชนิดตัวอักขระ (Character) คือ ข้อมูลที่เป็นตัวอักขระหนึ่งตัว ซึ่งเป็นไปตามตารางรหัส ASCII ประกอบด้วย ตัวอักษร ตัวเลข และอักขระพิเศษ ใช้พื้นที่ในการเก็บข้อมูล 1 ไบต์
2. ข้อมูลชนิดจำนวนเต็ม (Integer) คือ ข้อมูลที่เก็บตัวเลขเป็นจำนวนเต็ม ได้แก่ จำนวนเต็มบวก จำนวนเต็มลบ และศูนย์ ใช้พื้นที่ในการเก็บข้อมูล 2 ไบต์
3. ข้อมูลชนิดจำนวนเต็มที่มีขนาด 2 เท่า (Long Integer) คือ ข้อมูลที่มีเลขเป็นจำนวนเต็ม ใช้พื้นที่ในการเก็บข้อมูล 4 ไบต์
4. ข้อมูลชนิดเลขทศนิยม (Float) คือ ข้อมูลที่เป็นเลขทศนิยม ใช้พื้นที่ในการเก็บข้อมูล 4 ไบต์
5. ข้อมูลชนิดเลขทศนิยมอย่างละเอียด (Double) คือ ข้อมูลที่เป็นเลขทศนิยม ใช้พื้นที่ในการเก็บข้อมูล 8 ไบต์
ชนิด | ขนาด | ช่วงของค่า | การใช้งาน |
char | 1 ไบต์ | ASCII character (-128 ถึง 127) | เก็บข้อมูลชนิดอักขระ |
int | 2 ไบต์ | -32,768 ถึง 32,767 | เก็บข้อมูลชนิดจำนวนเต็ม |
long | 4 ไบต์ | -2,147,483,648 ถึง 2,147,483,649 | เก็บข้อมูลชนิดจำนวนเต็มแบบยาว |
float | 4 ไบต์ | 3.4 x 10-38 ถึง 3.4 x 1038 | เก็บข้อมูลชนิดเลขทศนิยม |
double | 8 ไบต์ | 1.7 x 10-308 ถึง 1.7 x 10308 | เก็บข้อมูลชนิดเลขทศนิยม |
นอกจากชุดอักขระรูปแบบ %d แล้วยังมีชุดอักขระจัดรูปแบบสำหรับในรูปจำนวนเต็มในฐานอื่นอีก คือ %o และ %x ซึ่งเป็นชุดอักขระที่ใช้จัดรูปแบบข้อมูลให้อยู่ในรูปจำนวนเต็มฐานแปด (octal) และจำนวนเต็มฐานสิบหก (hexadecimal) ตามลำดับ
4. การแสดงผลและรับข้อมูลเบื้องต้น
การแสดงผลของข้อมูลทางจอภาพ และการรับข้อมูลจากแป้นพิมพ์ โดยฟังก์ชันดังกล่าวจะอยู่ในไลบรารี stdio.h ซึ่งจะต้องเรียกออกมาก่อนด้วย #include
Note : #include เรียกว่า ไดเร็กทีฟ (directive) และ stdio.h เรียกว่า ไฟล์ส่วนหัว (header file)คำสั่ง #include เป็นคำสั่งพิเศษสำหรับช่วยในการคอมไพล์โปรแกรมภาษาซี คำสั่งนี้เรียกมาจากส่วนอื่น ไม่ต้องลงท้ายด้วยเครื่องหมาย Semicolon ( ; ) เขียนติดกันห้ามเว้นวรรคระหว่าง # กับ include
4.1 การแสดงผลของข้อมูล : คำสั่งที่ใช้สำหรับแสดงผลคือ ฟังก์ชัน printf()
ฟังก์ชัน printf()
ฟังก์ชัน printf() มีชื่อเต็มว่า print format เป็นฟังก์ชันที่ใช้พิมพ์ข้อความต่าง ๆ ออกทางจอภาพ ไม่ว่าจะเป็นจำนวนเต็ม int ทศนิยม float ข้อความ string หรืออักขระ char
รูปแบบคำสั่ง printf()
printf (“format”,variable);
format | ข้อมูลที่ต้องการแสดงผลออกทางหน้าจอ โดยข้อมูลนี้ต้องเขียนไว้ในเครื่องหมาย “ ” ข้อมูลที่สามารถแสดงผลได้มีอยู่ 2 ประเภท คือ ข้อความธรรมดา และค่าที่เก็บไว้ในตัวแปร ซึ่งถ้าเป็นค่าที่เก็บไว้ในตัวแปรต้องใส่รหัสควบคุมรูปแบบให้ตรงกับชนิดของข้อมูลที่เก็บไว้ในตัวแปรนั้นด้วย |
variable | ตัวแปรหรือนิพจน์ที่ต้องการนำค่าไปแสดงผลให้ตรงกับรหัสควบคุมรูปแบบที่กำหนดไว้ |
รหัสควบคุมรูปแบบการพิมพ์ (format code) แสดงผลค่าของตัวแปรออกทางจอภาพ ดังนี้
รหัสควบคุมรูปแบบ | การนำไปใช้งาน |
%d | แสดงผลรูปแบบเลขจำนวนเต็มสิบ |
%u | แสดงผลรูปแบบเลขจำนวนเต็มไม่มีเครื่องหมาย |
%f | แสดงผลรูปแบบเลขทศนิยม |
%e | แสดงผลรูปแบบเลขจำนวนจริงในรูปเลขยกกำลัง |
%c | แสดงผลรูปแบบตัวอักษรตัวเดียว (char) |
%s | แสดงผลรูปแบบชุดตัวอักษร (string) หรือข้อความ |
%o | แสดงผลรูปแบบเลขฐานแปด |
%x | แสดงผลรูปแบบเลขฐานสิบหก |
%% | แสดงผลเครื่องหมาย % |
ตัวอย่างที่ 2 การใช้ฟังก์ชัน printf() แสดงผลข้อความธรรมดาออกทางจอภาพ ดังนี้
printf(“Hello Program C”); | แสดงผลข้อความ Hello Program C ออกทางจอภาพ |
printf(“NampongSuksa School”); | แสดงผลข้อความ NampongSuksa School ออกทางจอภาพ |
อักขระควบคุมการแสดงผล หรือ อักขระหลีก (escape character) โดยใช้อักขระควบคุมการแสดงผลร่วมกับคำสั่ง ต้องเขียนอักขระควบคุมการแสดงผลไว้ภายในเครื่องหมาย “ ” ดังตัวอย่าง
อักขระควบคุมการแสดงผล | ความหมาย |
\n |
ขึ้นบรรทัดใหม่ |
\t |
เว้นช่องว่างเป็นระยะ 1 แท็บ |
\r |
กำหนดให้เคอร์เซอร์ไปอยู่ต้นบรรทัด |
\f |
เว้นช่องว่างเป็นระยะ 1 หน้าจอ |
\b |
ลบอักขระสุดท้ายออก 1 ตัว |
\ (ตามด้วย) 0 |
อักขระ NULL |
\’ |
อักขระ ’ |
\” |
อักขระ ” |
\ \ |
เครื่องหมาย \ (backslash) |
ตัวอย่างที่ 3 การใช้ฟังก์ชัน printf() ร่วมกับอักขระควบคุมการแสดงผล ดังนี้
printf(“Hello… \n”); | แสดงผลข้อความ Hello… แล้วขึ้นบรรทัดใหม่ |
printf(“Hello…\nStudent\n”); | แสดงผลข้อความ Hello… แล้วขึ้นบรรทัดใหม่พร้อมกับแสดงผลข้อความ Student จากนั้นขึ้นบรรทัดใหม่อีกครั้ง |
printf(“Num1 = %d\tNum2 = %f\n”,x,z); | แสดงผลข้อความ Num1 = 45 ตามด้วยการเว้นช่องว่าง 1 แท็บแล้วต่อด้วยข้อความ Num2 = 20.153 |
ตัวอย่างที่ 4 โปรแกรมพิมพ์ข้อความออกทางจอภาพ
/* 1 */ // program : Output.cpp/* 2 */ // พิมพ์ข้อความออกทางจอภาพ/* 3 *//* 4 */ #include<stdio.h>/* 5 *//* 6 */ main( ) {/* 7 */ printf(“The first output from C.\n”);/* 8 */ } |
ผลลัพธ์ คือ
The first output from C. |
ชุดของอักขระ / * ซึ่งใช้คู่กับ */ ที่ปรากฏในโปรแกรม ใช้บอกจุดเริ่มต้น และจุดสิ้นสุดของการเขียนคำอธิบาย (comment) กำกับส่วนต่าง ๆ ของโปรแกรม ข้อความที่เขียนอยู่ระหว่างชุดอักขระดัง กล่าวสามารถมีความยาวต่อเนื่องกันได้หลายบรรทัด และจะไม่ถูกประมวลผล ถึงแม้คำอธิบายประกอบโปรแกรมจะไม่ถือเป็นส่วนหนึ่งของการประมวลผล แต่มีความสำคัญอย่างยิ่งต่อการทำความเข้าใจโปรแกรม ในที่นี้ใช้แสดงเลขบรรทัดในโปรแกรม
บรรทัดที่ 1 และ 2 ใช้ชุดอักขระ // ด้านหน้าคำอธิบายกำกับส่วนต่างๆ ของโปรแกรมที่สิ้นสุดภายในบรรทัด ในที่นี้ใช้แสดงชื่อโปรแกรมและคำอธิบายการทำงานของโปรแกรม
บรรทัดที่ 3 และ 5 เป็นบรรทัดว่าง นักเขียนโปรแกรมสามารถใช้บรรทัดว่าง เพื่อเว้นช่วงระหว่างบรรทัด หรือใช้อักขระต่างๆ เช่น ช่องว่าง (blank) หรือแท็บ (tab) เพื่อสร้างระยะเยื้องในการจัดรูปแบบของโปรแกรมให้ง่ายต่อการอ่าน และมีรูปแบบเป็นของตนเอง
บรรทัด 4 เป็นการใช้คำสั่งของตัวประมวลผลก่อนซีที่มีชื่อว่า include ซึ่งขึ้นต้นด้วยอักขระ # ในที่นี้คำสั่ง #include จะมีผลให้แฟ้มชื่อ stdio.h ซึ่งเป็นแฟ้มส่วนหัวที่ใช้เก็บรวบรวมคำสั่งเกี่ยวข้องกับการรับ และการแสดงผลข้อมูล ถูกอ่านเข้ามาเพื่อประมวลผลร่วมกับโปรแกรม Output.cpp
เครื่องหมาย < > ล้อมรอบชื่อแฟ้ม stdio.h ใช้บอกตำแหน่งของแฟ้มในเครื่องคอมพิวเตอร์ซึ่งในที่นี้คือในสารระบบ (directory)include สำหรับเครื่องหมาย { และ } เพื่อบอกขอบเขตของฟังก์ชัน main( )
บรรทัดที่ 7 เรียกใช้ฟังก์ชัน printf( ) ซึ่งเป็นเพียงคำสั่งเดียวของโปรแกรม Output.cpp การทำงานของฟังก์ชัน printf( ) ได้ถูกนิยามอยู่ในแฟ้มส่วนหัว stdio.h ตามมาตรฐาน ANSI C และด้วยเหตุนี้โปรแกรม Output.cpp จึงต้องมีคำสั่ง #include<stdio.h> เพื่อให้สามารถประมวลผลคำสั่ง printf ( ) ได้อย่างถูกต้อง
อาร์กิวเมนต์[3] ของคำสั่ง printf( ) ซึ่งเขียนอยู่ระหว่างเครื่องหมาย ( และ ) ได้แก่ข้อความที่เขียนอยู่ระหว่างเครื่องหมาย “ และ ” ซึ่งเรียกว่าชุดตัวอักษร (string) ในที่นี้ชุดตัวอักษร The first output from C .\n” เป็นอาร์กิวเมนต์ค่าเดียวของ printf( ) และในกรณีที่อาร์กิวเมนต์ชนิดเป็นชุดตัวอักษรดังเช่นตัวอย่างมีผลให้ printf( ) แสดงข้อความของชุดตัวอักษรออกทางจอภาพ
จะเห็นว่าชุดอักขระ \n ที่ปรากฏเป็นส่วนหนึ่งของชุดตัวอักษรในบรรทัดที่ 7 ไม่ได้ถูกแสดงผลออกทางจอภาพ เนื่องจากว่าอักขระ \ ซึ่งเรียกว่า อักขระหลีก (escape character) มีผลให้อักขระ 1 ตัวที่ตามมา (ในที่นี้คืออักขระ n ) มีความหมายเปลี่ยนไปจากความหมายปกติ สำหรับชุดอักขระ \n คอมไพเลอร์ภาษาซีได้กำหนดให้มีความหมายเป็น ขึ้นบรรทัดใหม่
[3] อาร์กิวเมนต์ (argument) หมายถึง ค่าที่ส่งผ่านจากจุดที่เรียกใช้คำสั่งหรือฟังก์ชัน เข้าไปสู่การทำงานภายในคำสั่งหรือฟังก์ชันนั้น ๆ
4.2 การรับข้อมูลนำเข้า : คำสั่งที่ใช้สำหรับรับข้อมูลนำเข้าคือ ฟังก์ชัน scanf( )
ฟังก์ชัน scanf()
ฟังก์ชัน scanf( ) อยู่ในไลบรารีมาตรฐานของภาษาซี มีหน้าที่รับข้อมูลในรูปของรหัส ASCII ที่ผู้ใช้ป้อนทางแป้นพิมพ์แล้วนำไปเก็บไว้ในตำแหน่งที่กำหนดบนหน่วยความจำ
ในภาษา C การรับข้อมูลจากแป้นพิมพ์สามารถทำได้โดยการเรียกใช้ฟังก์ชัน scanf() ซึ่งเป็นฟังก์ชันมาตรฐานสำหรับรับข้อมูลจากแป้นพิมพ์ โดยสามารถรับข้อมูลได้ทุกประเภท ไม่ว่าจะเป็นจำนวนเต็ม ทศนิยม อักขระ หรือข้อความ
รูปแบบคำสั่ง scanf()
scanf(“format”,&variable);
format | การใช้รหัสควบคุมรูปแบบ เพื่อกำหนดชนิดของข้อมูลที่จะรับเข้ามาจากแป้นพิมพ์ โดยรหัสควบคุมรูปแบบชุดเดียวกับฟังก์ชัน printf() |
variable | ตัวแปรที่จะใช้เก็บค่าข้อมูลที่รับเข้ามาจากแป้นพิมพ์ โดยชนิดของตัวแปรจะต้องตรงกับรหัสควบคุมรูปแบบที่กำหนดไว้ นอกจากนี้หน้าชื่อของตัวแปรจะต้องนำหน้าด้วยเครื่องหมาย & ยกเว้นตัวแปรสตริง สำหรับเก็บข้อความเท่านั้นที่ไม่ต้องนำหน้าด้วย & |
ตัวอย่างที่ 5 การใช้งานฟังก์ชัน scanf( ) เพื่อรับข้อมูลจากแป้นพิมพ์
int speed; | สร้างตัวแปรชนิด int สำหรับเก็บค่าตัวเลขจำนวนเต็ม |
printf(“Enter wind speed : “); | แสดงข้อความให้กรอกค่าความเร็วลมเป็นจำนวนเต็ม |
scanf(“%d”,&speed); | รับค่าความเร็วลมเข้ามาเก็บไว้ในตัวแปร speed |
char answer; | สร้างตัวแปรชนิด char สำหรับเก็บอักขระ |
printf(“Enter Figure (Y : N) : “); | แสดงข้อความให้ป้อนอักขระ Y หรือ N |
scanf(“%c”,&answer); | รับอักขระเข้ามาเก็บไว้ในตัวแปร answer |
char name[10]; | สร้างตัวแปรสตริงสำหรับเก็บข้อความ |
printf(“Enter your name = “); | แสดงข้อความให้ป้อนชื่อ |
scanf(“%s”,name); | รับชื่อเข้ามาเก็บไว้ในตัวแปร nameสังเกตจะไม่ใส่เครื่องหมาย & ตัวแปรชนิดข้อความ |
ตัวอย่างที่ 6 โปรแกรมแปลงเลขฐานต่าง ๆ
/* 1 */ // Program : BaseConv.cpp/* 2 */ // แปลงข้อมูลระหว่างจำนวนเต็มฐานสิบ ฐานแปด และฐานสิบหก/* 3 *//* 4 */ #include<stdio.h>/* 5 *//* 6 */ main( ) {/* 7 */ int val ;/* 8 *//* 9 */ printf(“Enter a decimal integer : “);/* 10 */ scanf(“%d”,&val);/* 11 */ printf(“The value entered is %d in decimal,”,val);
/* 12 */ printf(” %o in octal.”,val); /* 13 */ /* 14 */ printf(“\nEnter an octal integer : “); /* 15 */ scanf(“%o”,&val); /* 16 */ printf(“The value entered is %x in hexadecimal.”,val); /* 17 */ /* 18 */ printf(“\nEnter a hexadecimal integer : “); /* 19 */ scanf(“%x”,&val); /* 20 */ printf(“The value entered is %d in decimal.”,val); /* 21 */ } |
ผลลัพธ์ คือ
Enter a decimal integer : 78The value entered is 78 in decimal , 116 in octal .Enter an octal integer : 116The value entered is 4e in hexadecimal.Enter a hexadecimal integer : 4eThe value entered is 78 in decimal. |
เพิ่มเติม : ฟังก์ชันการแสดงผลและรับข้อมูล
1. ฟังก์ชันการแสดงผลข้อมูล
getchar() รับข้อมูลตัวอักขระหนึ่งตัวเมื่อป้อนข้อมูลแล้วต้องกด <Enter>รูปแบบ ch = getchar();เมื่อมีการกดตัวอักขระ ตัวแปร ch จะเก็บรหัสแอสกีของอักขระตัวนั้น และจะแสดงผลออกทางจอภาพ |
getch() รับข้อมูลตัวอักขระหนึ่งตัว แต่ไม่ต้องกดคีย์ <Enter>รูปแบบ ch = getch();เมื่อมีการกดตัวอักขระ จะแสดงตัวนั้นทางจอภาพ และตัวแปร ch จะเก็บรหัสแอสกีของตัวอักขระตัวนั้น |
gets() ใช้รับข้อความสตริงรูปแบบ gets(str);เมื่อ str ถูกประกาศเป็นตัวแปรประเภทสตริง เมื่อมีการป้อนข้อความสตริง ข้อความนั้นจะถูกเก็บใน str |
2. ฟังก์ชั่นการรับข้อมูล
putchar() ใช้สำหรับแสดงตัวอักษรตัวเดียวออกทางจอภาพรูปแบบ putchar(ch);เมื่อ ch คือตัวแปรชนิด char หรือตัวอักขระที่อยู่ในเครื่องหมาย ‘ ’ |
puts() ใช้แสดงข้อความออกทางจอภาพรูปแบบ puts(str);เมื่อ str คือตัวแปรสตริงหรือข้อความที่อยู่ในเครื่องหมาย “ ” |
ที่มา :
ธีรวัฒน์ ประกอบผล. (2552). คู่มือการเขียนโปรแกรม ภาษา C. กรุงเทพฯ : ซัคเซส มีเดีย.
สถาบันส่งเสริมการสอนวิทยาศาสตร์และเทคโนโลยี กระทรวงศึกษาธิการ. (2553). หนังสือเรียนรายวิชาพื้นฐาน เทคโนโลยีสารสนเทศและการสื่อสาร ชั้นมัธยมศึกษาปีที่ 4-6. กรุงเทพฯ: โรงพิมพ์ สกสค.
. (2553). หนังสือเรียนรายวิชาเพิ่มเติม เทคโนโลยีสารสนเทศและการสื่อสาร ภาษาซี ชั้นมัธยมศึกษาปีที่ 4-6. กรุงเทพฯ: โรงพิมพ์ สกสค.