เริ่มต้นกับภาษาซี

ใบความรู้ที่ 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.  กรุงเทพฯ:  โรงพิมพ์  สกสค.