บทที่ 3
การพิมพ์และการรับข้อมูล
ในภาษา C
จะมีฟังก์ชันสำหรับการพิมพ์และการรับข้อมูลไว้ให้ใช้มากมาย การพิมพ์ก็คือ
การนำข้อมูลไปแสดงที่หน้าจอ และการรับข้อมูลก็คือ
การรับข้อมูลจากคีย์บอร์ดเข้ามา ซึ่งในภาษา C
นั้นจะมองอุปกรณ์ในเครื่องคอมพิวเตอร์เป็นไฟล์ทั้งหมด
ยกตัวอย่างเช่น
จอภาพจะเป็น Standard Output File และคีย์บอร์ดจะเป็น Standard Input
File ดังรูปที่ 3-1
รูปที่ 3-1 แสดงการพิมพ์และรับข้อมูล
Standard Input File โดยทั่วไปก็คือ
Buffered นั่นเอง
ซึ่งจะทำหน้าที่ในการเก็บข้อมูลที่ได้รับจากคีย์บอร์ดไปเก็บไว้
โดยเรียงลำดับกันเข้าไป
Standard Output File คือ จอภาพ ซึ่งก็เหมือนกับคีย์บอร์ด
ซึ่งจะเป็นเท็กซ์ไฟล์ เมื่อต้องการจะแสดงข้อมูลนั้น
จะทำการแปลงข้อมูลเป็นข้อความก่อนแล้วค่อยพิมพ์แสดงออกมา
การพิมพ์ข้อมูล
ฟังก์ชันมาตรฐานที่ใช้ในการพิมพ์ข้อมูลของภาษา C คือ printf ซึ่งมีรูปแบบดังนี้
รูปแบบ
Printf (“[รูปแบบข้อความ]”,[ตัวแปร])
รูปที่ 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
สัญลักษณ์ |
ความหมาย |
‘\0’ |
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(“[รูปแบบข้อความ]”,[ที่อยู่ของตัวแปร])
รูปที่ 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”
# include<stdio.h>
#include<conio.h>
int main(void)
{
clrscr();
printf("This program prints\n\n\t"Nothing!");
getch();
return(0);
}
ผลลัพธ์ที่ได้
กิจกรรมนับคาบเรียน
คำสั่ง ให้นักเรียนบอกคำตอบจากโปรแกรม ตามตัวอย่างโปรแกรม 3-1 พม
กดคลิกเื่พื่อส่งคำตอบตอบ
รายละเอียดการติดตามการเรียน
ให้นักเรียน บันทึกกิจกรรมที่ส่ง กดที่นี่
ผู้ปกครองติดตามการเรียนของนักเรียน
กดที่นี่
แบบทดสอบ คะแนนเต็ม 10 คะแนน ข้อละ 2 คะแนน
ข้อ 1 เขียนโปรแกรมรับค่าตัวเลขจำนวนเต็ม (int) ผ่านทางแป้นพิมพ์ และแสดงผลทางจอภาพจำนวน 5 หลัก กดคลิกเื่พื่อส่งคำตอบตอบ
ข้อ 2 เขียนโปรแกรมรับค่าตัวอักษรใด ๆ ผ่านทางแป้นพิมพ์ และแสดงผลออกมาทางจอภาพ กดคลิกเื่พื่อส่งคำตอบตอบ
ข้อ 3 เขียนโปรแกรมพักหน้าจอการแสดงผล กดคลิกเื่พื่อส่งคำตอบตอบ
ข้อ 4 เขียนโปรแกรมรับค่าตัวเลขจำนวนจริง (มีจุดทศนิยม) และแสดงผลทางจอภาพ ให้มีทศนิยม 2 หลัก กดคลิกเื่พื่อส่งคำตอบตอบ
ข้อ 5 เขียนโปรแกรมรับข้อความ " Hi How are your " และแสดงผลทางจอภาพ กดคลิกเื่พื่อส่งคำตอบตอบ
รายละเอียดการติดตามการเรียน
ให้นักเรียน บันทึกกิจกรรมที่ส่ง กดที่นี่
ผู้ปกครองติดตามการเรียนของนักเรียน
กดที่นี่