ใบความรู้ท่ี 4
การรับขอ้ มูลเข้าและแสดงผลข้อมลู
การรับข้อมลู เข้าและแสดงผลข้อมลู
1. ฟง กชัน getch();
เปน ฟงกชนั ทใ่ี ชใ นการรอรบั การกดแปนพิมพ (Key Board) 1 ตัวอักษรและจะไมแ สดงตวั อกั ขระท่ีกด
บนจอภาพ ฟง กชนั นถี้ ูกนิยามไวใ น conio.h
รปู แบบที่ 1 getch();
หมายถงึ หยดุ รอการกดแปนพมิ พ 1 ตัวอกั ษร
รปู แบบที่ 2 ตัวแปร = getch();
หมายถงึ หยุดรอการกดแปนพิมพ 1 ตวั อักษรมาเก็บไวทต่ี ัวแปร
2. ฟง กชนั getche();
เปนฟงกชันที่ใชในการรอรับการกดแปนพิมพ 1 ตัวอักษรและจะไมแสดงตัวอักขระที่กดบนจอภาพ
ฟงกชันนี้ถกู นยิ ามไวใ น conio.h
รปู แบบ getche();
หมายถึง หยดุ รอการกดแปนพิมพ 1 ตัวอักษรมาเกบ็ ไวท ่ีตัวแปรและแสดงผล
3. ฟง กช นั getchar();
เปนฟงกชันที่ใชในการรอรับการกดแปนพิมพ และจะแสดงตัวอักขระที่กดบนจอภาพ ฟงกชันนี้ถูก
นิยามไวใน conio.h
รูปแบบ char var = getchar();
หมายถึง หยดุ รอการกดแปนพมิ พต ัวอักษรมาเก็บไวท ่ีตัวแปร var
4. ฟง กชชัน putchar();
เปนฟงกช ันทใี่ ชใ นการแสดงตัวอักขระบนจอภาพ ฟงกช ันนถ้ี กู นิยามไวใน conio.h
รปู แบบ putchar(char var);
หมายถึง แสดงตวั อักขระในตัวแปร var ออกสหู นา จอภาพ
ตัวอยางโปรแกรมท่ี 4.1
#include<stdio.h>
#include<conio.h>
void main()
{
char letter[80];
int count, tag;
for(count=0; (letter[count]=getchar() != In';++count);
tag = count;
for(count=0; count~tag;++count)
putchar(toupper(letter[count]);
getch();
}
ผลการทำงานของโปรแกรม
5. ฟง กชัน printf0;
เปนฟงกชันที่ใชแ สดงขอมูลที่เปนตัวเลข ตัวอักขระ และสตริง ออกสูหนาจอภาพ หมายความวา
ฟงกชนั printf() ทำหนาทยี่ ายขอมลู จากหนว ยความจำของเครอ่ื งคอมพวิ เตอรส หู นว ยแสดงผลคอมพวิ เตอร
และฟงกชนั print) ถูกนยิ ามไวใน stdio.h
รูปแบบมาตรฐาน printf (control string, arg1, arg2, .... argn);
รูปแบบท่ี 1 printf ("ขอมูล");
ตัวอยา งเชน printf ("Hello C++..!");
ผลการรันโปรแกรม แสดงขอ มูลทเ่ี ปน ขอความ Hello C++...! แสดงออกสูทางหนาจอภาพ
รูปแบบที่ 2 printf ("รหัสควบคุมขอ มูล", อารก ิวเมนต); Lo keoterbsr
ตวั อยา งเชน A = 55;
printf("%d",A); //อารกิวเมนตเ ปนตัวแปร A
หมายถงึ แสดงขอ มูลคา ของตัวแปร A ออกมาแสดงผลในรปู ของเลขจำนวนเต็มตาม
การกำหนดของรหสั ควบคุมขอมูล (%d)
ผลการรนั โปรแกรม แสดง 55 ออกทางจอภาพ
รูปแบบท่ี 3 printf("ขอมูล รหัสควบคมุ ขอมลู ", อารก ิวเมนต) ;
ตัวอยา งเชน X= 999;
printf("Information in X = %d", X);
หมายถงึ แสดงขอ มูลคำวา Information in X = ตามดว ยคาของตวั แปร X ออกมา
แสดงผลในรูปของเลขจำนวนเตม็ ตามรหัสควบคมุ ขอมลู (%6d)
ผลการรนั โปรแกรม Information in X = 999
รหัสควบคมุ ขอ มูล
เปนรหัสควบคุมขอมูลซึ่งเปนการแสดงรูปแบบ (Format Code) ที่ใชในการแสดงผลสูหนาจอภาพ
โดยรูปแบบการสง่ั จะตองอยูหลงั เคร่ืองหมาย % รหัสควบคุมขอ มูลทใ่ี ชแ สดงดงั ตารางท่ี 4.1
ตารางท่ี 4.1 แสดงรหสั ควบคุมขอมูล
รหสั ควบคมุ ความหมาย
%C แสดงขอ มูลในรูปตวั อักขระ 1 ตัว (character)
%d แสดงขอมูลในรปู ตวั เลขจำนวนเตม็ (decimal)
%e แสดงขอมลู ในรูปทศนิยม ทมี่ ีเลขชกี้ ำลงั (exponential)
%f แสดงขอมลู ในรูปของตวั เลขทศนยิ ม (foat)
%g แสดงขอมลู ในรูปเลขทศนยิ ม รปู แบบ e หรอื f ขน้ึ อยูกบั ขอ มลู โดยจะไมแสดงเลขศูนยท่ี
อยูหลงั เลขทศนยิ มตวั สดุ ทาย
%i แสดงขอ มูลในรปู ของตัวเลขจำนวนเตม็ ฐานสิบ รูปแบบคดิ เครอ่ื งหมาย(integer) คือแสดง
ตวั เลขเปนชนดิ signed
%0 แสดงขอ มูลในรปู ของเลขฐาน 8 (octal)
%x แสดงขอ มลู ในรปู ของเลขฐาน 16 (hexa decimal)
%u แสดงขอมลู ในรปู จำนวนเต็มบวก หรอื แสดงเลขจำนวนเต็มไมคิดเคร่อื งหมาย(unsigned)
%s แสดงขอ มูลในรูปของขอความ (String) คอื แสดงขอมลู ทีเ่ ปนตัวอักขระมากกวา หน่ึงตวั
%p แสดงขอ มลู ในรูปท่ีอยูของตัวแปร (address)
%% แสดงเครอ่ื งหมาย %
รหัสควบคุมการแสดงผล
รหัสควบคุมการแสดงผล สามารถเขียนแทรกในคำสั่งของ printf(); ตามความตองการของนักเขียน
โปรแกรม ซึ่งสามารถเขียนกอ นสวนของรหัสควบคมุ หรือหลังรหัสควบคุมเปนการจัดรปู แบบการแสดงขอมูลสู
หนา จอภาพใหเ ปนระเบยี บและสื่อความหมายระหวางตัวโปรแกรมกบั ผูใชโปรแกรมไดถ ูกตอง รหสั ควบคุมการ
แสดงผลมีดังตารางที่ 4.2
รหสั ตารางท่ี 4.2 รหัสควบคมุ การแสดงผล
\n
\t ความหมาย
\r แสดงขึน้ บรรทัดใหม (new line)
\f แสดงตวั อกั ษรยอ หนากระดาษ (Tab)
\b สั่งใหต ัวชีต้ ำแหนง (Cursor) กลับไปอยูท ตี่ นบรรทัด
ส่ังใหเ วนการแสดงผลไป 1 หนา (feed)
ส่งั ใหตัวชต้ี ำแหนง (Cusor) ถอยหลงั กลับไปลบตัวอกั ษร 1 ตำแหนง
(back
space)
ตัวอยางโปรแกรม 4.2 เปนการสั่งใหแสดงขอมูลท่ีเปนขอความโดยตรง การแสดงขอมูลท่ีเปนตัวเลขจำนวน
เต็มสิ โดยผานการแสดงตวั แปร การแสดงขอความกอนแสดงขอ มูลท่ีเปนตัวเลขจำนวนเตม็ โดยผานการควบคุม
ดวยรสควบคมุ แตย ังไมม ีการควบคุมการแสดงผล หรอื ไมมกี ารจัดรปู แบบการแสดงผล
#include<stdio.h>
#include<conio.h>
void main( )
{
int A=55;X=999;
clrscr();
printf("Hello C+++...! ");
printf("%d",A);
printf("Information in X= %d",X);
getch();
}
ผลการทำงานของโปรแกรม
ตวั อยางโปรแกรมที่ 4.3 เปน การสง่ั ใหแสดงขอ มูลโดยมกี ารจดั รปู แบบการแสดงผล
#include<stdio.h>
#include<conio.h>
void main( )
{
int A=55,X=999;
clrscr();
printf("Hello C+++...! In");
printf("t%d'n",A);
printf("tInformation in X= %d",X);
getch();
}
ผลการทำงานของโปรแกรม
ตัวอยา งโปรแกรมท่ี 4.4 โปรแกรมท่ีนำรหสั การควบคุมขอ มลู (%d, %o, 9x, %c) มาทำการสรา งขอมลู ใชใ น
กาแสดงคาของตัวเลขจำนวนเต็ม ตัวเลขฐานแปด ตัวเลขฐานสิบหก ตัวอักขระ (ASCII Code)ของแตละคา
ตามลำดับ และรหสั การควบคมุ การแสดงผล (\n, \t) มาทำการสรา งระบบการแสดงผลท่สี มบรู ณ
#include<stdio.h>
#include<conio.h>
#define number 80
void main()
{
clrscr();
unsigned char Tascii;
printf("InDec Itl tOctal Itl It Hexa It Character");
for(Tascii = 65; Tascii<=number;++Tascii)
printf(" In%d\ tI\t%oltNt%xt t%c",Tascii,Tascii,Tascii,Tascii);
getch();
}
ผลการทำงานของโปรแกรม
การแสดงขอมูลโดยใชฟงกชัน print ในรูปแบบที่สามารถกำหนดขนาดขอมูลที่แสดงไดทั้งจำนวน
ตัวเลขกอนจุดทศนิยมและหลังจุดทศนิยม เปนการแสดงความเที่ยง (precision) โดยการกำหนดจำนวน
หลักการแสดงตัวเลขหลังจุดทศนิยม ถากำหนดจำนวนที่นอยกวา การแสดงผลจะทำการปดเศษทศนิยม ดัง
ตวั อยางที่ 4.5
ตัวอยางโปรแกรมท่ี 4.5 การกำหนดจำนวนตัวเลขกอ นและหลังจุดทศนยิ ม
ผลการทำงานของโปรแกรม
จากผลการทำงานโปรแกรม 4.5 การแสดงผลจากฟงกชัน printf"%5f %7.3f %5.1f\n\n ",a,a,a);ใน
รหัสควบคุ %5f....a เปนการกำหนดใหแสดงคาของตัวแปร ล ตัวเลขจำนวน 5 ตำแหนงกอนจุดทศนิยม
รหสั ควบคมุ %7.f....a เปน การกำหนดใหแสดงคาของตวั แปร ล ตวั เลขจำนวน 7 ตำแหนงกอ นจดุ ทศนิยมหลัง
จุดทศนิยม 3 ตำแหนง และรหสั ควบคมุ %5.1f....ล เปน การกำหนดใหแสดงคาของตวั แปร ล ตัวเลขจำนวน 5
ตำแหนง กอ นจุดทศนยิ ม หลังจุดทศนยิ ม 1 ตำแหนง
สวนฟงกชัน printf ("%e %.5e %.3eln "a,a,a), ในรหัสควบคุม %e....a เปนการกำหนดใหแสดงคา
องตัวแปร a แสดงขอมลู ในรูปทศนยิ มทม่ี ีเลขชี้กำลัง (exponential) ตามจำนวนจริง รหัสควบคุม%.5e... เปน
การกำหนดใหแสดงคา ของตัวแปร ล แสดงขอมลู ในรูปทศนิยมทีม่ ีเลขชี้กำลัง โดยใหแ สดงเลขหลังจุดทศนิยม
5 ตำแหนง และรหสั ควบคุม %.3e....ล เปน การกำหนดใหแสดงคา ของตัวแปร a แสดงขอ มูลในรูปทศนิยมที่มี
เลขชกี้ ำลัง โดยใหแสดงเลขหลังจดุ ทศนิยม 3 ตำแหนง
สวนฟงกชัน printf("%7s %9s %.5s" text,text,text); ในรหัสควบคุม %7s....text เปนการ
กำหนดใหแสดงคา ของตัวแปร text แสดงขอมูลในรปู ตวั อักษรจองจำนวนพ้ืนที่แสดง 7 ตัวอักษร รหัสควบคุม
%9s...text เปนการกำหนดใหแสดงคาของตัวแปร text แสดงขอมูลในรูปตัวอักษรของจำนวนพืน้ ที่แสดง 9
ตัวอักษรและรหัสควบคุม %...5s..text เปนการกำหนดใหแสดงคาของตัวแปร text แสดงขอมูลในรูป
ตัวอกั ษรจำนวนแสดง 5 ตวั อักษร
6. ฟงกช นั scanf();
เปน ฟง กช นั ท่ีใชในการตดิ ตอกับผใู ชงานโปรแกรมในการรับขอมูลจากแปน พิมพ (Key Board) เขามา
เกบ็ ไวใ นท่ีอยูของตัวแปร เพ่อื นำไปใชในการคำนวณและการประมวลผล ถกู นยิ ามไวใ น stdio.h
รปู แบบ scanf("รหัสของชนดิ ขอมลู ", ทอ่ี ยขู องตัวแปร);
ตวั อยา ง scanf("%d",&A);
หมายถงึ รอรบั คาขอมลู ทเ่ี ปน เลขจำนวนเตม็ มาเกบ็ ไวในท่ีอยขู องตัวแปร A
&A หมายถึง ทีอ่ ยูของตวั แปร A (Address A)
ตวั อยาง scanf("%f",&score);
หมายถึง รอรับคาขอมูลที่เปน เลขทศนิยมมาเกบ็ ไวในท่ีอยูข องตวั แปs score
ในฟง กชนั scanf() มีการควบคมุ ขอมลู จากการปอนคียบ อรด โดยใชรหัสควบคมุ ดังตารางท่ี 4.3 ซ่ึงมี
ขอสงั เกตวา มสี ว นท่ีเหมอื นและแตกตา งกบั รหสั ควบคุมของคำส่งั print0) บางรหสั
ตารางท่ี 43 แสดงรหัสควบคุมการรับขอมูลจากคยี บอรดของคำสัง่ scanf()
รหัสควบคุม ความหมาย
%c รบั ขอมลู เปน ตัวอกั ขระ 1 ตัว
%d รบั ขอ มลู เปน ตวั เลขจำนวน
%e รับขอ มูลเปน ตัวเลขทศนิยม
%of รับขอ มลู เปน ตวั เลขทศนิยม
%g รบั ขอมลู เปนตัวเลขทศนยิ ม
%h รับขอ มลู เปน ตัวเลขจำนวนเตม็ แบบ short
%I รบั ขอมลู เปน ตวั เลขจำนวนเตม็ เลขฐานสบิ หก เลขฐานแปด
%o รับขอมลู เปนตัวเลขฐานแปด
%x รบั ขอมลู เปนตัวเลขฐานหก
%s รับขอมูลเปน ขอ ความ จำนวนขอ มลู ท่ีเปน ตวั อักขระมากกวาหน่งึ ตวั ใชในการ
เกบ็ อักขระนลั ฃ \ 0 ใหกบั สตรงิ ออโตเมติก
%ou รับขอมูลเปน ตัวเลขจำนวนเตม็ แบบ unsigned
การปอ นขอมูลใหก ับที่อยตู วั แปรของฟง กชนั scanf() โดยมาตรฐานใชอักขระไวทสเปช ในการแยก
ขอ มลู ของแตล ะฟล ดตวั อยางโปรแกรมที่ 4.6
ตัวอยางโปรแกรมที่ 4.6 การปอ นขอมลู โดยฟง กช นั scanf()
ผลการทำงานของโปรแกรม
จากผลการทำงานของโปรแกรม 4.6 ใชก ารเวน วรรคหรอื อักขระไวทสเปช คน่ั ระหวางการปอนเลข 1
เลข 2 และเลข 3 เพือ่ กำหนดคาขอมลู จากคยี บ อรดใหท่อี ยูตวั แปรแตละตัว a b และ c ตามลำดับ
การปอ นขอ มูลสามารถใชการปอนกด Enter แทนการใชการเวน วรรคหรืออกั ขระไวทส เปช ค่ัน
ระหวางการปอนเลข 1 เลข 2 และเลข 3 ใหกับท่อี ยูต วั แปรแตล ะตวั a b และ c ตามลำดบั
หรือการกำหนดจำนวนของตัวอกั ขระที่ใชในการปอนขอมูล จากตัวโปรแกรมใชฟ งกชัน scanf() ได
ดงั โปรแกรมท่ี 4.7 เชน การกำหนดจำนวนตัวเลขที่ตอ งการในปอ น 3 ตวั อกั ขระ สามารถกำหนดดวย%3d
ตัวอยางโปรแกรมท่ี 4.7 แสดงการกำหนดจำนวนอักขระในการปอ นฟง กชัน scanf()
ผลการทำงานของโปรแกรม
แตถ า ผใู ชงานโปรแกรมปอนผดิ พลาด คือใชก ารกำหนดจำนวนอักขระในการปอน เชน 1234 5678
9100 สง ผลทำใหการรบั ขอ มูลผดิ พลาดไดด งั น้ี
จากผลการทำงานโปรแกรมพบวา ขอ มูลที่ตัวแปร a เก็บเปนคา 123 b เก็บคา 4 และ c เก็บคา
567 สวนคา 89100 ถูกตัดทิ้งเพราะโปรแกรมมีการกำหนดรับคา 3 อักขระแรกเปนของตัวแปร a สวนที่
เหลอื เปน ของตวั แปร b คือ 4 เทานั้นเพราะหลงั การกดเลข 4 มีการเวนวรรค สงผลใหโ ปรแกรมตีความวาจบ
การปอนคาชุดที่สอง สวนตัวแปร c รับคาอีก 3 อักขระที่ปอนคือ 567 เทานั้น สวนเหลือตัวโปรแกรมไม
สามารถรับได จงึ ไมส นใจ
การกำหนดของรหัสควบคุมในโปรแกรมภาษาซียอมใหมีการกำหนดเพิ่มอารก วิ เมนตเพิ่มเติมได เชน
ตองการกำหนดใหโปรแกรมรับจำนวนเต็มแบบ short หรือ unsigned สามารถกำหนดดวย %hd ถา
กำหนดใหรับจำนวนเต็บแบบ long หรือ unsigned long สามารถกำหนดดวย %ld หรือถาตองการ
กำหนดใหร ับเลขทศนิยมมีความละเอียดสองเทา สามารถกำหนดว ย %Lf ดงั ตัวอยา งโปรแกรมท่ี 4.8
ตัวอยางโปรแกรมที่ 4.8 การกำหนดการรับคาเพิ่มอารกิวเมนตเพิ่มเติม โดยทำการกำหนดตัวแปรที่ชนิด
double 2 ตัวแปรคือ ad และ bd ในการรับคาดวย ฟงกชัน scanf(“%lf%lf”,&ad,&bd); และการกำหนด
ตวั แปรท่ชี นดิ short 2 ตัวแปรคอื as และ bs ในการรบั คาดวย ฟงกชัน scanf(“%hd %hd” , &as , &bs);
จะพบวาถาทำการปอนคาใหตัวแปรชนิดที่ short จำนวน 2 ไบท (บิต) ซ่ึงมีคาตัวเลขที่สามารถรับคาไดอยู
ระหวา ง -32468 ถึง +32767 เทาน้ัน ถามกี ารปอนคาเกินไปหนึง่ คำ ขอมูลจะทำการกำหนดคาใหเปนคา ติด
ลบคา แรกของคาคอื -32768 ดงั ผลการทำงานของโปรแกรม