บทที่ 5 การแสดงผลและการรับข้อมูล

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

                   ตัวอย่างการใช้คำสั่ง print แสดงผลจากค่าของตัวแปรหรือนิพจน์การคำนวณออกทางหน้าจอแสดงดังต่อไปนี้ 

1.กำหนดตัวแปรชื่อ name เก็บข้อความ Sajja
2.แสดงข้อความ x1 = ค่าของตัวแปร x1 และเนื่องจากการใส่รหัสควบคุมการแสดงผลเป็น %d หมายถึงการกำหนดให้ตัวแปรภาษา c แสดงค่าของตัวแปร x1 ในรูปแบบของตัวเลขจำนวนเต็มซึ่งค่าของตัวแปร x1 จะถูกนำไปแสดงทุกตำแหน่งของ %dดังนั้น ผลทีได้จากการทำงานของคำสั่งนี้คือ x1=43
3.แสดงค่าตัวแปร x2 ในรูปแบบเลขฐานสิบหก เนื่องจากการใช้รหัสควบคุมแสดงผล %x ส่วนค่าของตัวแปร x3 แสดงผลในรูปแบบของเลขฐานแปด เนื่องจากใช้รหัสควบคุมการแสดงผล %0 ผลจากการทำงานของคำสั่งนี้คือ x2=4d x3 = 1075
4.แสดงค่าของตัวแปร y1 ในรูปแบบตัวเลขทศนิยมหกหลัก เนื่องจากใช้รหัสควบคุมการแสดงผล %f
และแสดงค่าของตัวแปร y2 ในรูปแบบของ e ยกกำลัง เนื่องจากใช้รหัสควบคุมการแสดงผล %e
5.แสดงผลค่าของตัวแปร z ในรูปแบบของอักขระ (%c) และตัวแปร name ในรูปแบบของข้อความ (%s)
เมื่อสั่งรันโปรแกรม เราจะเห็นการทำงานของโปรแกรมดังแสดงในรูปต่อไปนี้
1.สร้างตัวแปร x1 เก็บจำนวนเต็ม -234 ตัวแปร x2 เก็บจำนวนเต็มในรูปแบบของเลขฐานแปด(ขึ้นต้นด้วยเลขศูนย์) และตัวแปรx3 เก็บจำนวนเต็มในรูปแบบของเลขฐานสิบหก (ขึ้นต้นด้วยศูนย์เอ็กซ์)
2. สร้างตัวแปรy1 เก็บจำนวนทศนิยม และตัวแปร y2 เก็บจำนวนทศนิยมในรูปแบบ e ยกกำลัง
3.สร้างตัวแปร z เก็บอักขระ c
4. แสดงค่าของตัวแปร x1 ในรูปแบบจำนวนเต็มฐานสิบ (%d) ค่าของตัวแปร x2 ในรูปแบบจำนวนเต็ม (%d) และค่าตัวแปร x3 ในรูปแบบจำนวนเต็มฐานสิบ (%d)
5.แสดงค่าของตัวแปร y2 ในรูปแบบของจำนวยทศนิยม 6หลัก (%f)
6.แสดงค่าของตัวแปร z ในรูปแบบของจำนวนเต็มฐานสิบ (%d) ซึ่ง z เก็บอักขระ C ดังนั้นตัวแปลภาษา C ในระบบเลขฐานสิบ (ตามที่ระบุในตาราง ASCII) ขึ้นมาให้ผลการทำงานของโปรแกรม แสดงดังรูปต่อไปนี้
แสดงผลให้เป็นระเบียบด้วยอักขระควบคุมการแสดงผล
                นอกจากนี้เรายังสามารถจัดรูปแบบการแสดงผลให้ดูเป็นระเบียบมากขึ้นได้ อย่างเช่น ขึ้นบรรทัดใหม่หลังแสดงข้อความ หรือเว้นระยะแท็บระหว่างข้อความ โดยใช้อักขระควบคุมการแสดงผลร่วมกับคำสั่ง printf() ในภาษา C มีอักขระควบคุมแสดงผลหลายรูปแบบด้วยกัน ดังแสดงต่อไปนี้
การนำอักขระควบคุมการแสดงผลมาใช้ เราต้องเขียนอักขระควบคุมการแสดงผลไว้ภายในเครื่องหมาย    ร่วมกับข้อความหรือรหัสควบคุมแบบการแสดงผล ดังแสดงต่อไปนี้
ตัวอย่างการใช้อักขระควบคุมการแสดงผลร่วมกับคำสั่ง printf () แสดงดังต่อไปนี้


เมื่อสั่งรันโปรแกรมจะปรากฏผลการทำงานดังรูปต่อไปนี้

                เมื่อสั่งรันโปรแกรมข้อความจะแสดงออกทางหน้าจอดังรูปต่อไปนี้


ควบคุมขนาดพื้นที่แสดงผล
ตามปกติในการแสดงผลตัวแปรภาษา C จะเตรียมพื้นที่กับข้อมูลที่ต้องการแสดงผล ยกตัวอย่างดังรูปต่อไปนี้

แต่เราสามารถเพิ่มพื้นที่การแสดงผลได้ตามต้องการ อย่างเช่น กำหนดให้แสดงข้อความ HELLO ในพื้นที่ขนาด 8 ช่อง หรือกำหนดให้แสดงตัวเลข123.456 ในพื้นที่ขนาด 12 ช่อง โปรแกรมจะแสดงผลชิดข้างขวาของพื้นที่ในหน่วยความจำที่จองไว้ โดยจะเว้นพื้นที่ทางด้านซ้ายเอาไว้ ดังรูปจำลองต่อไปนี้
วิธีการกำหนดขนาดพื้นที่การแสดงผล ให้ใส่ตัวเลขขาดของของพื้นที่ที่ต้องการใว้หลังเครื่องหมาย % ในรหัสควบคุมรูปแบบ ดังแสดงตัวอย่างต่อไปนี้
เมื่อสั่งรันโปรแกรมจะปรากฏผลการทำงานดังรูปต่อไปนี้

ในกรณีที่ต้องการเปลี่ยนจากการแสดงผลชิดขอบด้านขวาให้มาชิดขอบด้านซ้ายแทน สามารถทำได้โดยใส่เครื่องหมาย – ไว้หน้าตัวเลขระบุขนาดพื้นที่ ดังแสดงในตัวอย่างดังต่อไปนี้

ควบคุมจำนวนอักขระในข้อความที่จะให้แสดงผล
การแสดงผลข้อความโดยใช้รหัสควบคุมรูปแบบ %s เราสามารถกำหนดได้ว่าต้องการจะแสดงข้อความทั้งหมด หรือเลือกเฉพาะบางส่วนของข้อความ โดยกำหนดจำนวนอักขระที่ต้องการแสดงผลได้ดังรูปแบบดังต่อไปนี้
เมื่อสั่งรันโปรแกรมจะปรากฏอักขระ 6 ตัวแรกของข้อความ C  Language ออกมาทางหน้าจอ


ควบคุมการแสดงตัวเลขหลังจุดทศนิยม
นอกจากนี้การแสดงผลตัวเลขทศนิยม ตามปกติถ้าไม่ได้กำหนดค่าใด ๆ เพิ่มเติม เมื่อใช้รหัสควบคุมรูปแบบ %f โปรแกรมจะแสดงตัวเลขหลังจุดทศนิยมทั้งหมด 6 ตำแหน่ง ดังตัวอย่างโปรแกรมต่อไปนี้
เมื่อสั่งรันโปรแกรมจะปรากฏผลการทำงานดังรูปต่อไปนี้
ตัวอย่างการแสดงผลจำนวนทศนิยมโดยที่มีการกำหนดตำแหน่งทศนิยม แสดงดังต่อไปนี้

ผลการทำงานของโปรแกรม แสดงดังรูปต่อไปนี้

แสดงผลทีอักขระด้วยคำสั่ง putchar()
ในการแสดงผลตัวอักขระ หรืออักขระ (char) ออกทางหน้าจอ นอกจากการใช้คำสั่ง printf()
พร้อมกับกำหนดรหัสควบคุมรูปแบบเป็น %c แล้ว เราสามารถเรียกใช้คำสั่งสำหรับแสดงตัวอักษรหรืออักขระโดยเฉพาะได้อีกด้วย
จากการทำงานของโปรแกรม จะเห็นได้ว่าคำสั่ง putchar() แสดงอักขระออกมาทางหน้าจอโดยไม่ขึ้นบรรทัดใหม่ ดังนั้น ถ้าต้องการแสดงอักขระแล้วขึ้นบรรทัดใหม่ด้วย ให้ใช้วิธีการเพิ่มคำสั่ง printf(“\n”)ต่อจากคำสั่ง putchar() ดังตัวอย่างต่อไปนี้
แสดงผลเป็นข้อความด้วยคำสั่ง puts()
นอกจากการแสดงผลอักขระด้วยฟังก์ชัน putchar() แล้วในภาษา C ยังมีคำสั่งสำหรับแสดงผลข้อความออกทางหน้าจอโดยเฉพาะอีกด้วยนั่นก็คือ คำสั่ง puts() ซึ่งมีรูปแบบการเรียกใช้คำสั่งต่อไปนี้
ตัวอย่างการใช้งานคำสั่ง puts() ในการแสดงข้อความออกทางหน้าจอ แสดงต่อไปนี้
คำสั่ง puts() เมื่อแสดงข้อความแล้ว จะขึ้นบรรทัดใหม่ให้ได้โดยอัตโนมัติ ซึ่งผลการรันโปรแกรมแสดงดังต่อไปนี้
รับข้อมูลจากคีย์บอร์ดด้วยคำสั่ง scanf()
ในภาษา C การรับข้อมูลจากคีย์บอร์ดสามารถทำได้โดยการเรียกใช้ฟังก์ชัน scanf() ซึ่งเป็นฟังก์ชันมาตรฐานสำหรับรับข้อมูลจากคีย์บอร์ด  โดยสามารถรับข้อมูลได้ทุกประเภทไม่ว่าจะเป็นจำนวนเต็ม ทศนิยม อักขระ หรือข้อความก็ตาม
ตัวอย่างการใช้คำสั่ง scanf() เพื่อรับข้อมูลจากคีย์บอร์ด เข้ามาเก้บไว้ในตัวแปร แสดงดังต่อไปนี้
เมื่อสั่งรันโปรแกรมจะปรากฏข้อความ Enter Wind Speed : พร้อมเคอร์เซอร์กะพริบรอให้เรากรอกข้อมูล ดังรูปต่อไปนี้
ทดลองการกรอกตัวเขจำนวนเต็มแทนค่าความเร็วลมลงกดปุ่ม(Enter) เพื่อให้โปรแกรมกลับไปทำงานต่อ จากนั้นโปรแกรมจะแสดงข้อความพร้อมทั้งความเร็วลมขึ้นมาให้บนหน้าจอ

เมื่อสั่งรันโปรแกรมจะปรากฏข้อความ How old are you? ขึ้นมาให้เรากรอกอายุ

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

                เมื่อสั่งรันโปรแกรมจะปรากฏข้อความขึ้นมาให้กรอกประสบการณ์การทำงานและเงินเดือน ดังรูป

สำหรับการกรอกข้อมูลจะต้องเว้นช่องระหว่างข้อมุลทั้ง 2 ตัวตามรูปแบบที่โปรแกรมกำหนดไว้(%d %f)
                เมื่อกดปุ่ม (Enter) โปรแกรมก็จะแสดงค่าที่เรากรอกขึ้นมาบนหน้าจอ ดังรูปต่อไปนี้
รับข้อมูลที่ละอักขระด้วย getchar() และ getch()
                                ภาษา  C มีคำสั่งพิเศษสำหรับรับข้อมูลประเภทอักขระหรือตัวอักษรจากคีย์บอรืดโดยเฉพาะนั่นคือคำสั่ง getchar() และ getch() ทั้ง 2 คำสั่งที่ใช้รับข้อมูลประเภทอักขระ (char) โดยมีรูปแบบการใช้คำสั่งดังแสดงต่อไปนี้
                ถึงแม้ว่าคำสั่ง getchar() จะใช้สำหรับข้อมุลชนิดอักขระเข้ามาแล้วจะต้องกดปุ่ม (Enter) โปรแกรมจะกลับทำงานต่อไป และตัวอักษรที่เรากรอกจะแสดงออกขึ้นมาให้เห็นบนหน้าจอด้วย ตัวอย่างการเรียกใช้คำสั่งgetchar() รับตัวอักษรเข้ามาจากคีย์บอร์ดแสดงดังต่อไปนี้

                เมื่อสั่งรันโปรแกรมจะปรากฏข้อความขึ้นมาให้ป้อนอักขระ แล้วกดปุ่ม(Enter) ดังรูปต่อไปนี้

                โปรแกรมจะกลับไปทำงานต่อ โดยแสดงข้อความ Thank you ขึ้นมา สังเกตว่าการใช้คำสั่ง getchar() จะแสดงอักขระที่เราป้อนเข้าไปให้เห็นบนหน้าจอ
             
                      ในส่วนของการใช้คำสั่ง getchar() หลังจากที่ป้อนอักขระเข้ามา 1 ตัวแล้วเราไม่ต้องกดปุ่ม(enter)
โปรแกรมจะกลับไปทำงานต่อทันที และอักขระที่เราป้อนเข้าไปในโปรแกรมก็จะไม่แสดงให้เห็นบนหน้าจอด้วย โดยการคำสั่ง getchar() เราต้องเขียนฟรีดพรเซสเซอรืไดเรคทีฟ ไว้ในส่วนหัวของโปรแกรมด้วย ดังในตัวอย่างต่อไปนี้


เมื่อสั่งรันโปรแกรมจะปรากกข้อความขึ้นมาให้ป้อนอักขระ

                เมื่อป้อนอักขระเข้าไปแล้ว โปรแกรมจะกลับไปทำงานต่อทันทีโดยไม่ต้องกดปุ่ม(Enter) และจะไม่แสดงอักขระที่ป้อนเข้ามาให้เห็นบนหน้าจอ


รับข้อมูลเป็นข้อความด้วย gets()
                นอกจากคำสั่งพิเศษในการรับข้อมูลชนนิดอักขระหรือตัวอักษรแล้ว การรับข้อความจากคียืบอร์ดก็มีคำสั่งพิเศษให้เรียกใช่เช่นกัน ก็คือคำสั่ง gets() วึ่งมีรูปแบบดังนี้

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

                เมื่อสั่งรันโปรแกรมจะปรากฏข้อความขึ้นมาให้ป้อนอักขระ

                ให้ทดลองพิมพ์ข้อความ แล้วกดปุ่ม(enter)  เพื่อให้โปรแกรมกลับไปทำงานในคำสั่งต่อไป

                โปรแกรมจะแสดงข้อความที่เราป้อนขึ้นมาบนหน้าจอ ดังรูปต่อไปนี้

แสดงค่าของตัวแปรด้วยรหัสควบคุมรูปแบบการแสดงผล
                ในหัวข้อที่ผ่านมาเราทดลองเรียกใช้ฟังก์ชัน printf() แสดงข้อความออกทางหน้าจอ แต่ถ้าจะเขียนคำสั่งเพื่อนำค่าที่เก็บไว้ในตัวแปรขึ้นมาแสดงผล จะต้องมีการใส่รหัสควบคุมรูปแบบ (format code) ให้กับตัวแปรที่แสดงค่า โดยรหัสควบคุมรูปแบบการแสดงผลข้อมูลชนิดต่าง ๆ ในภาษา C แสดงดังตารางต่อไปนี้
             ตัวอย่างเช่น ถ้าจะแสดงค่าของจำนวนเต็มต้องใส่รหัสควบคุมรูปแบบ %d หรือถ้าจะแสดงค่าของจำนวนทศนียมก็ต้องรหัสควบคุมรูปแบบ %f เป็นต้น รูปแบบการเขียนฟังก์ชัน printf() พร้อมกำหนดรหัสควบคุมรูปแบบแสดงดังต่อไปนี้