ในตอนนี้จะพูดถึงการรับข้อมูลอินพุตจากแป้นพิมพ์ (keyboard) โดยใช้ฟังก์ชัน scanf() แบบเบื้องต้น
การทำงานของ scanf()
ฟังก์ชัน scanf() จะทำการอ่านค่าข้อความที่มีรูปแบบ (format string) จากการพิมพ์ keyboard แล้วนำมาเก็บไว้ในที่อยู่ (ตัวแปร) ที่กำหนด ทั้งนี้สามารถอ่านค่าเข้ามาเก็บในตัวแปรหลาย ๆ ตัวในคำสั่งเดียวได้ ซึ่ง scanf() จะให้ผลลัพธ์ในการทำงานเป็นเลขจำนวนเต็มแสดงถึงจำนวนข้อมูลที่นำใส่ตัวแปร กรณีที่อ่านข้อมูลใส่ตัวแปรไม่สำเร็จจะให้ผลลัพธ์เป็นศูนย์
รูปแบบการเขียนคำสั่ง scanf()
กรณีอ่านข้อมูลค่าเดียว
เมื่อ scanf() ครั้งที่ 2 ต้องการอ่านค่าจำนวนเต็ม แต่ใส่ตัวอักขระ พบว่า scanf() ตัวที่ 3 จะถูกข้าม และได้ข้อมูลเป็น 0.000 มาแทน
scanf("format string",&var);กรณีอ่านข้อมูลหลายค่า
scanf("format string", &var1, &var2, ..., &varN);โดย format string จะเป็นการระบุชนิดข้อมูลที่จะอ่าน (Conversion หรือ Specifier) ซึ่งมีลักษณะ (เบื้องต้น) ดังนี้
- %c จะอ่านข้อมูล 1 อักขระ
- %d จะอ่านข้อมูลจำนวนเต็ม (int)
- %f จะอ่านข้อมูลจำนวนจริง (float หรือ double)
- %s จะอ่านข้อมูลสตริงหรืออักขระที่เรียงต่อกัน ซึ่งอาจจะมีอักขระหลายตัว
ตัวอย่างการทำงานของ scanf() เป็นดังรูปด้านล่าง
แต่ถ้าหากใส่ข้อมูลไม่ถูกรูปแบบที่ระบุไว้ใน format string จะทำให้ผลการอ่านค่าผิดพลาด ดังรูปด้านล่าง เมื่อ scanf() ครั้งที่ 2 ต้องการอ่านค่าจำนวนเต็ม แต่ใส่เลขจำนวนจริงมีทศนิยม พบว่า scanf() ครั้งที่ 3 จะถูกโดดข้าม และได้ 0.34 มาเป็นข้อมูลแทน
สำหรับการอ่านข้อมูลพร้อมกันหลาย ๆ ค่า เราจะเขียนได้โดยระบุชนิดข้อมูลที่จะอ่านหลายค่า แล้วใส่ตัวแปรเป็นรายการตามลำดับ สำหรับการใส่ข้อมูล ผู้ใช้โปรแกรมจะแยกข้อมูลแต่ละตัวออกจากกันโดยใช้ white space คือ การกด เว้นวรรค (spacebar) หรือ แท็บ (tab) หรือ ขึ้นบรรทัดใหม่ (enter/return) ดังตัวอย่างในรูปด้านล่าง ซึ่งเป็นการใส่ข้อมูลทีละค่าแล้วกด enter ก่อนใส่ข้อมูลตัวต่อไป
รูปด้านล่างเป็นตัวอย่างการใส่ข้อมูลแต่ละค่าโดยคั่นด้วยการเว้นวรรค
Source code listing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /*---------------------------------------------------- Program: ScanfDemo Objectives: Using scanf() for read input from keyboard Created by Panupong Sornkhom email: panupongs@nu.ac.th -----------------------------------------------------*/ #include <stdio.h> int main() { int iMyVar1,iMyVar2,iAnswer; printf("Enter data 1 (integer):"); /* Read input from keyboard and store in iMyVar */ scanf("%d",&iMyVar1); printf("Enter data 2 (integer):"); scanf("%d",&iMyVar2); iAnswer = 3*iMyVar1 + 5*iMyVar2 - 10; printf("You enter %d and %d\n",iMyVar1,iMyVar2); printf("Answer = %d\n",iAnswer); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /*---------------------------------------------------- Program: ScanfDemo2 Objectives: Using scanf() for read input from keyboard Created by Panupong Sornkhom email: panupongs@nu.ac.th -----------------------------------------------------*/ #include <stdio.h> int main() { char c; int i; float f; printf("Enter a single character: "); scanf("%c",&c); // read a character printf("Enter an integer number: "); scanf("%d",&i); // read an integer printf("Enter a real number: "); scanf("%f",&f); // read a real number /* Show data read from keyboard */ printf("Here are your entered data\n"); printf("%c %d %f\n",c,i,f); return 0; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*----------------------------------------------------
Program: ScanfDemo3
Objectives: Using scanf() for read multiple data
input from keyboard
Created by Panupong Sornkhom
email: panupongs@nu.ac.th
-----------------------------------------------------*/
#include <stdio.h>
int main()
{
char c;
int i;
float f;
printf("Enter data character integer");
printf(" and real number respectively: ");
scanf("%c%d%f",&c,&i,&f); // read a set of data
/* Show data read from keyboard */
printf("Here are your entered data\n");
printf("%c %d %f\n",c,i,f);
return 0;
}
คลิป vdo อธิบาย
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /*---------------------------------------------------- Program: ScanfDemo3 Objectives: Using scanf() for read multiple data input from keyboard Created by Panupong Sornkhom email: panupongs@nu.ac.th -----------------------------------------------------*/ #include <stdio.h> int main() { char c; int i; float f; printf("Enter data character integer"); printf(" and real number respectively: "); scanf("%c%d%f",&c,&i,&f); // read a set of data /* Show data read from keyboard */ printf("Here are your entered data\n"); printf("%c %d %f\n",c,i,f); return 0; } |