Saturday, February 21, 2015

ตอนที่ 3: การรับข้อมูลจาก keyboard ด้วย scanf() แบบเบื้องต้น


ในตอนนี้จะพูดถึงการรับข้อมูลอินพุตจากแป้นพิมพ์ (keyboard) โดยใช้ฟังก์ชัน scanf() แบบเบื้องต้น

การทำงานของ scanf()

ฟังก์ชัน scanf() จะทำการอ่านค่าข้อความที่มีรูปแบบ (format string) จากการพิมพ์ keyboard แล้วนำมาเก็บไว้ในที่อยู่ (ตัวแปร) ที่กำหนด ทั้งนี้สามารถอ่านค่าเข้ามาเก็บในตัวแปรหลาย ๆ ตัวในคำสั่งเดียวได้ ซึ่ง scanf() จะให้ผลลัพธ์ในการทำงานเป็นเลขจำนวนเต็มแสดงถึงจำนวนข้อมูลที่นำใส่ตัวแปร กรณีที่อ่านข้อมูลใส่ตัวแปรไม่สำเร็จจะให้ผลลัพธ์เป็นศูนย์

รูปแบบการเขียนคำสั่ง scanf()

กรณีอ่านข้อมูลค่าเดียว
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 มาเป็นข้อมูลแทน

เมื่อ scanf() ครั้งที่ 2  ต้องการอ่านค่าจำนวนเต็ม แต่ใส่ตัวอักขระ พบว่า  scanf() ตัวที่ 3 จะถูกข้าม และได้ข้อมูลเป็น 0.000 มาแทน

สำหรับการอ่านข้อมูลพร้อมกันหลาย ๆ ค่า เราจะเขียนได้โดยระบุชนิดข้อมูลที่จะอ่านหลายค่า แล้วใส่ตัวแปรเป็นรายการตามลำดับ สำหรับการใส่ข้อมูล ผู้ใช้โปรแกรมจะแยกข้อมูลแต่ละตัวออกจากกันโดยใช้ 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 อธิบาย




No comments:

Post a Comment