การส่งออกและนำเข้าข้อมูล
Author: Pakin Olanraktham
ในการเขียนโปรแกรม เราสามารถทำการสื่อสารกับผู้ใช้งานได้ ซึ่งจะมีอยู่สองประเภทคือ
- การส่งออกข้อมูล (Output): โดยในที่นี้ จะแสดงผลข้อมูลออกทางหน้าจอ
- การนำเข้าข้อมูล (Input): รับข้อมูลจากผู้ใช้
การส่งออกข้อมูล (Output)
ในภาษา C เรานิยมใช้ฟังก์ชัน printf() ในการส่งออกข้อความตามที่ต้องการ โดยประโยคที่ต้องการจะส่งออกต้องถูกครอบด้วย "" ภายในวงเล็บเท่านั้น
printf("Hello, World!"); // จะส่งออกคำว่า "Hello, World!"
printf("784"); // จะส่งออกคำว่า "784"
printf("IOI") // จะส่งออกคำว่า "IOI"
printf("\n") // จะเป็นการขึ้นบรรทัดใหม่
printf("Hi\n") // จะส่งออกคำว่า "Hi" แล้วขึ้นบรรทัดใหม่
แล้วถ้าเกิดเราอยากส่งออกค่าของตัวแปรล่ะ? เราสามารถทำได้ โดยจะต้องใช้ Format Specifier
Format Specifier คือสิ่งที่ใช้ในการบอกโปรแกรม ว่าตำแหน่งนี้ ใช้สำหรับตัวแปรชนิดใด โดยตัวแปรแต่ละชนิด จะมี Format Specifier ของตนเอง ดังตาราง
| ประเภทตัวแปร | Format Specifier | ความหมาย |
|---|---|---|
int |
%d หรือ %i |
จำนวนเต็ม |
long long |
%lld |
จำนวนเต็มขนาดใหญ่ |
float |
%f |
จำนวนทศนิยม (ส่งออกทศนิยม 6 หลัก) |
float (ทศนิยม 2 หลัก) |
%.2f |
จำนวนทศนิยมโดยปัดทศนิยมเป็น 2 หลัก |
double |
%lf |
จำนวนทศนิยม (ส่งออกทศนิยม 6 หลัก) |
char |
%c |
ตัวอักษร 1 ตัว |
โดยเราใช้ Format Specifier ทั้งในการนำเข้าและส่งออกข้อมูล ซึ่งเวลาส่งออกข้อมูล จะมีโครงสร้างของโค้ดดังนี้
โดยที่ [some text] เราสามารถเขียนอะไรก็ได้ ที่เราอยากให้ส่งออก ส่วน %FS_i คือ Format Specifier ของตัวแปรที่ i ที่เราต้องการส่งออก โดยเราจะเขียนชื่อของตัวแปร คั่นด้วยเครื่องหมาย comma ตามลำดับที่เราต้องการจะส่งออก ซึ่งหากเขียน Format Specifier ไม่ตรงกับชนิดของตัวแปร อาจเกิด Error ได้
int age = 20;
float price = 99.347;
char grade = 'A';
printf("Age: %d\n", age); // จะส่งออก "Age: 20" แล้วขึ้นบรรทัดใหม่
printf("Price: %.2f\n", price); // จะส่งออก "Price: 99.35" แล้วขึ้นบรรทัดใหม่
printf("Grade: %c\n", grade); // จะส่งออก "Grade: A" แล้วขึ้นบรรทัดใหม่
printf("All: %d, %f, %c", age, price, grade); // จะส่งออก "All: 20, 99.347000, A"
การนำเข้าข้อมูล (Input)
การนำเข้าข้อมูลในภาษา C ใช้ฟังก์ชัน scanf() ฟังก์ชันนี้ใช้สำหรับรับข้อมูลจากผู้ใช้และเก็บลงในตัวแปร ซึ่งจะมีโครงสร้างดันนี้
คำเตือน
จำเป็นต้องใช้เครื่องหมาย & หน้าชื่อตัวแปรสำหรับการนำเข้าข้อมูล แต่ไม่ต้องใช้สำหรับการส่งออกข้อมูล
ตัวอย่าง
เราต้องการนำเข้าข้อมูล 3 ตัวคือ อายุ (age), ราคา (price) และเกรด (grade) ซึ่งจะมาในรูปแบบ อายุ ราคา เกรด (แต่ละข้อมูลจะถูกขั้นด้วยช่องว่าง)
int age;
float price;
char grade;
scanf("%d %f %c", &age, &price, &grade); // ข้อมูลที่นำเข้าจะถูกเก็บลงในตัวแปรตามลำดับ
คำแนะนำ
- เราสามารถรับค่าข้อมูลที่ไม่ได้ถูกขั้นด้วยช่องว่างได้ เช่น ข้อมูลเวลาจะมาในรูปแบบ
HH:MM:SSเราสามารถรับค่าแยกชั่วโมง นาที วินาที ออกจากกันได้ โดยการscanf("%d:%d:%d", &h, &m, &s); - กรณีข้อมูลถูกแบ่งด้วยบรรทัดใหม่ สามารถรับค่าพร้อมกันได้เลย เช่น
scanf("%d%d", &a, &b);ยกเว้นการรับค่าตัวแปรประเภท character ด้วย %c ที่จะสามารถรับอักขระของช่องว่าง และ บรรทัดใหม่ไปเก็บไว้ได้ รวมถึงการวรรคและบรรทัดใหม่จากตัวแปรชนิดอื่นที่รับมาก่อนหน้าด้วย สามารถแก้ได้ด้วยการใส่หน้าเครื่องหมาย%เช่นscanf("%d%d %c", &a, &b, &c);หรือscanf("%d %d", &a, &b); scanf(" %c", &c); - ไม่ขำเป็นต้องสนใจลำดับการ output กับ input เช่น เราไม่จำเป็นต้องเก็บคำตอบไว้ แล้วค่อย output ออกมาทีเดียว หลัง input เสร็จ แต่สามารถ print ได้ทันทีเลย แม้ว่าจะยัง input ไม่ครบ เพราะระบบ Grader แยก input และ output ออกจากกัน
โจทย์
| Problem | Source | Difficulty | Solution |
|---|---|---|---|
| A+B Problem | PROG | Very Easy | View |
| X2 | PROG | Very Easy | View |