![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
บทที่ 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 | h | d | %hd |
float | - | f | %f |
และผู้ใช้สามารถกำหนดความยาวของข้อมูลที่จะแสดงออกมาได้ โดยมีรูปแบบคำสั่งดังนี้
%[ความยาว][ตัวกำหนดข้อมูล]
สามารถดูตัวอย่างได้ในตารางที่ 3- 2
ตารางที่ 3 -2 การแสดงข้อมูลแบบกำหนดและไม่กำหนดความยาว
ค่า | %d | %4d |
12 | 12 | 12 |
ถ้าข้อมูลเป็นตัวเลขชนิด 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?
ผลลัพธ์ที่ได้
โปรแกรมที่ 3-2 เป็นโปรแกรมที่จะแสดงค่าของตัวอักษรออกมาเป็นตัวเลข โดยจะประกาศตัวแปรตัวอักษรตัวอักษรแล้วกำหนดค่าเริ่มต้นให้กับตัวแปรเหล่านั้น และพิมพ์ค่าเหล่านั้นออกมาเป็นตัวเลข
โปรแกรมที่ 3-2 โปรแกรมค่าของตัวอักษรออกมาเป็นตัวเลข
ผลลัพธ์ที่ได้
โปรแกรมที่ 3-3 เป็นโปรแกรมที่จะแสดงผลลัพธ์ออกมาเหมือนกับรายงาน
ผลลัพธ์ที่ได้
โปรแกรมที่ 3-4 โปรแกรมแสดงการใช้ฟังก์ชันรับข้อมูลตัวอักษร
ผลลัพธ์ที่ได้