Saturday, January 8, 2011

คำสั่งในการรับข้อมูล scanf

scanf เป็นคำสั่งที่ใช้เพื่อรับข้อมูลจาก key board
รูปแบบคำสั่ง scanf("format string",address list);
โดยคำสั่งจะประกอบไปด้วยสองส่วนได้แก format string และ address
scanf ใช้พรีโปรเซสเซอร์ไดเรคทีฟ stdio.h

  1. format string : จะคล้ายกับคำสั่ง printf โดยจะอยู่ในเครื่องหมาย " " Double quote แต่จะมีเพียงลักษณะเดียวคือ รูปแบบค่าตัวแปร หมายความว่า
    - ถ้าจะรับข้อมูลที่เป็นตัวเลยจำนวนเต็มจะต้องใช้ %d
    - ถ้าจะรับข้อมูลที่เป็นจุดทศนิยมจะต้องใช้ %f
    - ถ้าจะรับข้อมูลที่เป็นอักขระจะต้องใช้ %c
    - ถ้าจะรับข้อมูลที่เป็นสายอักขระจะต้องใช้ %s
  2. address list : เป็นส่วนที่อ้างที่อยู่ของตัวแปลที่จะรับค่าจากคีย์บอร์ดโดยใช้สัญลักษณ์ "&" และตามด้วยชื่อตัวแปร โดยมีข้อยกเว้นว่าถ้าเป็นตัวแปรชนิดที่เป็นสายอักขระ (String) จะไม่ต้องใส่ &
**หลักการใช้งาน เมื่อต้องการให้คอมพิวเตอร์รับช้อมูลชนิดใดๆ จะต้องมีการกำหนดตัวแปรใช้เป็นชนิดตามข้อมูลที่เราจะรับ แล้วจึงใช้คำสั่ง scanf เพื่อรับข้อมูลมาเก็บไว้ในตัวแปร

ตัวอย่างการใช้โปรแกรม scanf

#include <stdio.h>
int main()
{
float gpa; //ประกาศตัวแปร gpa รับค่าเกรดเป็นลักษณะจุดทศนิยม
char name[20]; //ประกาศตัวแปร name รับค่าชื่อที่เป็นลักษณะสายอักขระ
printf("Enter your name : ");
scanf("%s",name); //ตัวแปรที่รับค่าเป็นสายอักขระไม่ต้องมี &
printf("Enter your GPA : ");
scanf("%f",&gpa); //ตัวแปลที่รับเป็น float ต้องมี & หน้าตัวแปร
return 0;
}
ปัญหาที่เกิดจากการรันโปรแกรมนี้
ในบรรทัด 7 เราจะไม่สามารถกด space bar เพื่อทำการเว้นวรรคการพิมพ์ข้อความได้ถ้าเรากด space bar เราจะไม่สามาถรับต่า GPA ต่อได้ ดังนั้นถ้าเราอยากจะพิมพ์อักขระที่สามารถเ้ว้นวรรคได้รูปแบบคำสั่งจะเป็น
scanf("%[^\n]",string);


#include <stdio.h>
int main()
{
float gpa;
char name[20];
printf("Enter your name : ");
scanf("%[^\n]",name); //เปลี่ยน %s เป็น %[^\n] เพื่อให้รับค่าที่เว้นวรรคได้
printf("Enter your GPA : ");
scanf("%f",&gpa);
printf("Name is %s\n",name);//แสดงผลค่า name ที่รับมาจากแป้นพิมพ์
printf("GPA is %.2f",gpa); //แสดงผลค่า gpa ที่รับมาจากแป้นพิมพ์
return 0;
}

ผลจากการรันโปรแกรม


การรับค่าหลายๆตัวแปรใรคำสั่งเดียว
#include <stdio.h>
int main()
{
int my_day,my_month,my_year;
printf("Enter your birthday (Format dd/mm/yyyy): ");
scanf("%d/%d/&d",&my_day,&my_month,&my_year);
//มีการรับค่า my_day,my_month,my_year
printf("Your Birthday are %d-%d-%d",my_day,my_month,my_year);
return 0;
}
ผลการรันโปรแกรม

No comments:

Featured Post

การแปลภาษาของโปรแกรมภาษาซี

ภาษาซีเป็นภาษาชั้นสูงและเป็นภาษาที่มนุษย์เข้าใจ แต่เครื่องคอมพิวเตอร์เข้าใจเฉพาะภาษาเครื่อง (Machine Language) เท่านั้น ดังนั้นหากต้องการให้...