บทที่ 3 การพิมพ์และการรับข้อมูล

สพฐ 1untitled-41 e0b89ee0b8a3e0b8b0e0b981e0b8aae0b887e0b8a7e0b8b4e0b897e0b8a2e0b8b21 google

ในภาษา C  จะมีฟังก์ชันสำหรับการพิมพ์และการรับข้อมูลไว้ให้ใช้มากมาย  การพิมพ์ก็คือ  การนำข้อมูลไปแสดงที่หน้าจอ และการรับข้อมูลก็คือ  การรับข้อมูลจากคีย์บอร์ดเข้ามา  ซึ่งในภาษา C นั้นจะมองอุปกรณ์ในเครื่องคอมพิวเตอร์เป็นไฟล์ทั้งหมด  ยกตัวอย่างเช่น  จอภาพจะเป็น Standard Output File  และคีย์บอร์ดจะเป็น Standard Input File ดังรูปที่ 3-1

16

                     รูปที่ 3-1  แสดงการพิมพ์และรับข้อมูล

Standard Input File  โดยทั่วไปก็คือ  Buffered  นั่นเอง  ซึ่งจะทำหน้าที่ในการเก็บข้อมูลที่ได้รับจากคีย์บอร์ดไปเก็บไว้  โดยเรียงลำดับกันเข้าไป
Standard Output File  คือ  จอภาพ  ซึ่งก็เหมือนกับคีย์บอร์ด  ซึ่งจะเป็นเท็กซ์ไฟล์  เมื่อต้องการจะแสดงข้อมูลนั้น  จะทำการแปลงข้อมูลเป็นข้อความก่อนแล้วค่อยพิมพ์แสดงออกมา
การพิมพ์ข้อมูล
ฟังก์ชันมาตรฐานที่ใช้ในการพิมพ์ข้อมูลของภาษา C คือ  printf  ซึ่งมีรูปแบบดังนี้
รูปแบบ
Printf  (“[รูปแบบข้อความ]”,[ตัวแปร])

17

รูปที่ 3 – 2 แสดงคำสั่งในการ Output  ข้อมูลออกทางหน้าจอ

ในส่วนรูปแบบข้อความนั้น  อาจจะเป็นตัวอักษร  ข้อความ  หรือเป็นตัวกำหนดชนิดของข้อมูล  ซึ่งใช้กำหนดชนิดข้อมูลที่จะพิมพ์  ซึ่งจะต้องอยู่หลังเครื่องหมาย %  เสมอ  และสามารถใช้ได้ทั้งการ  Input  และ  Output  ดังแสดงในตารางที่ 3 -1

ตารางที่ 3 – 1 แสดงตัวกำหนดชนิดข้อมูล

ชนิดข้อมูล

ขนาด

รหัส

ตัวอย่าง

char

c

%c

short int
int
long int

h

I or L

d
d
d

%hd
%d
%Ld

float
double
long doule



L

f
f
f

%f
%f
%Lf

และผู้ใช้สามารถกำหนดความยาวของข้อมูลที่จะแสดงออกมาได้  โดยมีรูปแบบคำสั่งดังนี้
%[ความยาว][ตัวกำหนดข้อมูล]
สามารถดูตัวอย่างได้ในตารางที่ 3- 2

ตารางที่ 3 -2  การแสดงข้อมูลแบบกำหนดและไม่กำหนดความยาว

ค่า %d %4d
      12
123
1234
12345
12
123
1234
12345
    12
123
1234
12345

ถ้าข้อมูลเป็นตัวเลขชนิด float ก็สามารถทำได้เช่นกัน  แต่จะต้องกำหนดตัวเป็นดังนี้
% [ความยาว].[จำนวนเลขหลังจุดทศนิยม][ตัวกำหนดข้อมูล]
เช่น
printf(“%7.2f”,23.35000);
ซึ่งมีความหมายว่า  ข้อมูลที่จะแสดงยาวทั้งหมด 5 ตัว  โดยแบ่งเป็นจำนวนตัวเลขหน้าจุด  ทศนิยม 4 ตัว  ทศนิยม 1 ตัว  และตัวเลขหลังจุดทศนิยมอีก 2 ตัว ผลลัพธ์ของคำสั่งด้านบนจะเป็นดังนี้
                                23.35
ตัวอย่างการพิมพ์ข้อมูล
1. printf(“%d%c%f”,23, ‘z’,4.1);
ผลลัพธ์ที่ได้เป็นดังนี้
                                23z4.100000
ผลลัพธ์ที่ออกมาติดกัน  เพราะในรูปข้อความระหว่างตัวกำหนดชนิดข้อมูลแต่ละตัวนั้นไม่ได้เว้นวรรคไว้  จึงแสดงผลออกมาติดกัน
2. printf(“%d %c %f”, 23. ‘z’, 4.1);
ผลลัพธ์ที่ได้เป็นดังนี้
                23 z 4.100000
เป็นการพิมพ์ตามตัวอย่างที่ 1 แต่แก้ไขให้มีการเว้นวรรคระหว่างค่าด้วย
3.            int num1 = 23;
char zee = ‘z’;
float num2 = 4.1;
printf(“%d %c %f”, num1, zee, num2);
ผลลัพธ์ที่ได้เป็นดังนี้
                23 z 4.100000
4.            printf(“%d\t%c\t%5.1f”, 23, ‘z’, 14.2);
printf(“%d\t%c\t%5.1f”, 107, ‘A’, 53.6);
printf(“%d\t%c\t%5.1f”, 1754, ‘F’, 122.0);
printf(“%d\t%c\t%5.1f”, 3, ‘P’, 0.1);
                ผลลัพธ์ที่ได้เป็นดังนี้
                                23                           z              14.2
                                107                         A             53.6
                                1754                       F             122.0
                                3                              P             0.1
5. printf(“The number is %6d”, 23);
ผลลัพธ์ที่ได้เป็นดังนี้
                                The number is     23
ในภาษา C นั้นจะมีค่าคงที่ที่เป็นตัวอักษรอยู่ชุดหนึ่ง  ที่จะใช้ในการควบคุมการพิมพ์และแสดงเครื่องหมายบางอย่างที่ไม่สามารถพิพม์เครื่องหมายนั้นตรงๆ  ลงไปในรูปแบบของข้อความได้ ซึ่งชุดค่าคงที่ของตัวอักษรเหล่านี้  เรียกว่า Back-slash character ดังแสดงในตารางที่ 3-3
ตารางที่ 3-3  แสดง Back-slash character

สัญลักษณ์

ความหมาย

‘’

Null Character

‘\a’

Alert

‘\b’

Backspace

‘\t’

Horizontal

‘\n’

Newline

‘\v’

Vertical tab

‘\f’

Form feed

‘\r’

Carriage return

‘\’

Single quote

‘\”’

Double quote

‘\\’

Backslash

ตัวอย่างการพิมพ์ข้อมูลแบบที่ผิด
1. printf(“%d %d %d\n”, 44, 55);
44  55  0
ในรูปแบบข้อความมีตัวกำหนดชนิดข้อมูล 3 ตัว แต่มีค่าที่ส่งให้เพียง 2 ค่า
2. printf(“%d %d\n”, 44, 55, 66);
44  55
ในรูปแบบข้อความมีตัวกำหนดชนิดข้อมูลเพียง 2 ตัว แต่มีค่าที่ส่งไปให้ 3 ตัว ทำให้พิมพ์ค่าที่ 3 อกมาได้
3. long int x = 444446766;
printf(“%d\n”, x);
-18386
พิมพ์ค่าออกมาไม่ตรงตามค่าที่แท้จริง  เนื่องจากใช้ตัวกำหนดชนิดข้อมูลไม่ตรงกับชนิดข้อมูลที่ต้องการจะพิมพ์  จะต้องใช้ตัวกำหนดข้อมูลเป็น %Ld
รูปแบบการรับข้อมูล
ฟังก์ชันมาตรฐานที่ใช้ในการรับข้อมูลของภาษา C คือ scanf ซึ่งมีรูปแบบดังนี้
รูปแบบ
                Scanf(“[รูปแบบข้อความ]”,[ที่อยู่ของตัวแปร])

17

                                 รูปที่ 3-3 แสดงฟังก์ชันในการรับข้อมูลจากคีย์บอร์ด

เมื่อโปรแกรมทำงานมาถึงฟังก์ชันนี้  โปรแกรมจะหยุดรอให้ผู้ใช้ป้อนข้อมูล  โดยข้อมูลที่ป้อนลงไปจะไปแสดงบนจอภาพด้วย  เมื่อป้อนเสร็จให้กดปุ่ม Enter ข้อมูลก็จะถูกเก็บในตัวแปรตามรูปแบบข้อความ  โดยในรูปแบบข้อความนั้นจะต้องมีตัวกำหนดชนิดข้อมูลด้วย  ซึ่งตัวกำหนดชนิดข้อมูลจะต้องมีจำนวนเท่ากับตัวแปร  มิฉะนั้นจะเกิด Error ขึ้นมาทันที
ตัวอย่างการรับข้อมูล
1. 214  156  14z
scanf(“%d%d%d%c”, &a, &b, &c, %d);
สาเหตุที่ไม่ต้องเว้นวรรคระหว่าง 14 กับ z นั้น เพราะ %c จะไม่ตัดช่องว่าง เพราะช่องว่างก็ถือว่าเป็นตัวอักษรเหมือนกัน  เพราะฉะนั้นจะต้องแก้เป็นดังนี้
                scanf(“%d%d%d %c”, &a, &b, &c, %d);
2. 2314  15  2.14
scanf(“%d %d %f”, &a, &b, &c);
การรับค่าที่เป็นตัวเลขนั้น  เว้นวรรคจะไม่มีผลค่าการรับค่า
3. 14/26 25/66
scanf(“%2d/%2d %2d/%2d”, &num1, &num2, &num3, &num4);
ถ้ามี / ในรูปแบบข้อความ  ผู้ใช้ต้องพิมพ์เข้าไปด้วยในระหว่างการรับข้อมูบล
4. 11-25-56
scanf(“%d-%d-%d”,&a, &b, &c);
ตัวอย่างการรับข้อมูลที่ผิด
1. int a = 0;
 scanf(“%d”,a);
printf(“%d/n”,a);
234                         (Input)
                                                0                              (Output)
ตัวอย่างนี้ผิดเพราะในตอนรับค่าไม่มีเครื่องหมาย & หน้า a ทำให้เมื่อรับค่าแล้วไม่รู้จะไปเก็บค่าไว้ที่ไหนทำให้ error
2. float a = 2.1;
scanf(“%5.2f”,&a);
printf(“%5.2f”,a);
ตัวอย่างนี้จะคอมไพล์ผ่านแต่จะรันไม่ได้  เพราะในการรับค่าจะไม่สามารถกำหนดความยาวในการรับแบบจุดทศนิยมได้
3. int a;
Int b;
scanf(“%d%d%d”,&a, &b);
Printf(“%d %d/n”, a, b);
5  10                      (Input)
                                5  10                      (Output)
ตัวอย่างนี้ในตอนรับค่ามีตัวกำหนดชนิดข้อมูล 3 ตัว แต่มีที่อยู่ของตัวแปรเพียง 2 ตัว ฟังก์ชั่น scanf จะรับค่าเพียง 2 ค่า และจะออกไปเลย  เพราะไม่สามาหาที่อยู่ให้กับค่าที่ 3 ได้
ฟังก์ชันการรับข้อมูลตัวอักษร
การที่จะใช้ฟังก์ชันต่อไปนี้ได้  จะต้องนำเข้าเข้าไลบรารีไฟล์ที่ชื่อ conio.h ด้วย
getch เมื่อทำงานมาถึงฟังก์ชันนี้  โปรแกรมจะหยุดให้ผู้ใช้พิมพ์ข้อมูล 1 ตัวอักษร และเมื่อป้อนเสร็จแล้วไม่ต้องกดปุ่ม Enter และเคอร์เซอร์จะไม่ขึ้นบรรทัดใหม่  และตัวอักษรที่พิมพ์ลงไปจะไม่แสดงออกทางจอภาพด้วย  ซึ่งตัวอย่างแสดงได้ดังนี้
                ch = getch();
getche ฟังก์ชันนี้จะทำงานเหมือนกับฟังก์ชัน getch แต่จะแสดงตัวอักษรที่พิมพ์เข้าไปออกทางจอภาพด้วย ซึ่งตัวอย่างแสดงดังนี้
ch = getch();
getchar เมื่อทำงานมาถึงฟังก์ชันนี้  โปรแกรมจะหยุดให้ผู้ใช้พิมพ์ข้อมูล 1 ตัวอักษร  และเมื่อป้อนเสร็จแล้ว  จะต้องกดปุ่ม Enter ด้วย และเคอร์เซอร์ก็จะขึ้นบรรทัดใหม่  ส่วนตัวอักษรที่พิมพ์ลงไปก็จะแสดงออกทางจอภาพด้วย  ซึ่งตัวอย่างแสดงดังนี้
ch = getchar(0;
ตัวอย่างโปรแกรม
ในโปรแกรม 3-1 เป็นโปรแกรมง่ายๆ จะแสดง “Nothing”
                โปรแกรมที่ 3-1 โปรแกรมที่แสดงคำว่า “Nothing”

18

                ผลลัพธ์ที่ได้

20

โปรแกรมที่ 3-2 เป็นโปรแกรมที่จะแสดงค่าของตัวอักษรออกมาเป็นตัวเลข  โดยจะประกาศตัวแปรตัวอักษรตัวอักษรแล้วกำหนดค่าเริ่มต้นให้กับตัวแปรเหล่านั้น  และพิมพ์ค่าเหล่านั้นออกมาเป็นตัวเลข
โปรแกรมที่ 3-2 โปรแกรมค่าของตัวอักษรออกมาเป็นตัวเลข

19

                ผลลัพธ์ที่ได้

 21

                 โปรแกรมที่ 3-3 เป็นโปรแกรมที่จะแสดงผลลัพธ์ออกมาเหมือนกับรายงาน

22

                 ผลลัพธ์ที่ได้

  23

โปรแกรมที่ 3-4 โปรแกรมแสดงการใช้ฟังก์ชันรับข้อมูลตัวอักษร

24

                 ผลลัพธ์ที่ได้

25

ใส่ความเห็น