การส่งออกและนำเข้าข้อมูล
Author: Pakin Olanraktham
ในการเขียนโปรแกรม เราสามารถทำการสื่อสารกับผู้ใช้งานได้ ซึ่งจะมีอยู่สองประเภทคือ
- การส่งออกข้อมูล (Output): โดยในที่นี้ จะแสดงผลข้อมูลออกทางหน้าจอ
- การนำเข้าข้อมูล (Input): รับข้อมูลจากผู้ใช้
การส่งออกข้อมูล (Output)
ในภาษา C++ เรานิยมใช้ฟังก์ชัน cout คู่กับ << ในการส่งออกข้อความตามที่ต้องการ โดยประโยคที่ต้องการจะส่งออกต้องถูกครอบด้วย "" ภายในวงเล็บเท่านั้น ซึ่งหากเราต้องการส่งออกหลายประโยค เราต้องมี << คั่น โดยที่ output ที่ได้จะไม่มีเว้นวรรคระหว่างประโยคเหล่านั้น เช่น
cout << "Hello, World!"; // จะส่งออกคำว่า "Hello, World!"
cout << "78" << "4"; // จะส่งออกคำว่า "784"
cout << "I" << "O" << "I"; // จะส่งออกคำว่า "IOI"
cout << "\n"; // จะเป็นการขึ้นบรรทัดใหม่
cout << "HI\n"; // จะส่งออกคำว่า "Hi" แล้วขึ้นบรรทัดใหม่
แล้วถ้าเกิดเราอยากส่งออกค่าของตัวแปรล่ะ? เราสามารถทำได้ โดย
int age = 20;
float price = 99.347;
char grade = 'A';
cout << "Age: " << age << "\n"; // จะส่งออก "Age: 20" แล้วขึ้นบรรทัดใหม่
cout << "Price: " << price << "\n"; // จะส่งออก "Price: 99.35" แล้วขึ้นบรรทัดใหม่
cout << "Grade: " << grade << "\n"; // จะส่งออก "Grade: A" แล้วขึ้นบรรทัดใหม่
cout << "All: " << age << " " << price << " " << grade; // จะส่งออก "All: 20 99.347 A"
คำแนะนำ
*ค่าเริ่มต้นของ cout คือ 6 หลักสำคัญ
- ถ้าตัวเลขมีน้อยกว่า 6 หลัก ก็จะแสดงเท่าที่จำเป็น เช่น
float PI = 3.14จะส่งออกแค่ 3.14 *ถ้าอยากบังคับให้ทศนิยมเท่ากันทุกครั้ง ใช้ fixed << setprecision(n) เมื่อ n คือตำแหน่งทศนิยมที่อยากได้ เช่นcout << fixed << setprecision(4) << PI;จะได้ 3.1400 - ใน double ถ้าเลขใหญ่มาก หรือเล็กมาก cout อาจเลือกพิมพ์ออกมาเป็น scientific notation เช่น 1e9 หากอยากให้ได้ 100000000 ให้ใช้
- สำหรับการส่งออกอักขระตัวเดียวเช่น
\nสามารถใช้'\n'ได้ เนื่องจากcoutสามารถส่งออกตัวแปรประเภทcharได้
การนำเข้าข้อมูล (Input)
การนำเข้าข้อมูลในภาษา C ใช้ฟังก์ชัน cin คู่กับ >> ฟังก์ชันนี้ใช้สำหรับรับข้อมูลจากผู้ใช้และเก็บลงในตัวแปร ซึ่งจะมีโครงสร้างดันนี้
ตัวอย่าง
เราต้องการนำเข้าข้อมูล 3 ตัวคือ อายุ (age), ราคา (price) และเกรด (grade) ซึ่งจะมาในรูปแบบ อายุ ราคา เกรด (แต่ละข้อมูลจะถูกขั้นด้วยช่องว่าง)
คำแนะนำ
cinจะไม่สนใจช่องว่าง หรือการขึ้นบรรทัดใหม่ กล่าวคือ หาก input อยู่คนละบรรทัด สามารถใช้cin >> a >> b;ได้เลย- ไม่จำเป็นต้องสนใจลำดับการ output กับ input เช่น เราไม่จำเป็นต้องเก็บคำตอบไว้ แล้วค่อย output ออกมาทีเดียว หลัง input เสร็จ แต่สามารถ print ได้ทันทีเลย แม้ว่าจะยัง input ไม่ครบ เพราะระบบ Grader แยก input และ output ออกจากกัน
การเพิ่มความเร็วการนำเข้าข้อมูล
เมื่อทำโจทย์ที่มีข้อมูลนำเข้าจำนวนมาก (หลายล้านตัว) cin / cout แบบปกติอาจช้าเกินไป โดยเราสามารถเพิ่มความเร็วของมันได้โดยการเพิ่มโค้ดต่อไปนี้ไว้บนสุดของ int main():
ข้อควรระวัง
หากใช้โค้ดเพิ่มความเร็ว คุณจะต้องเลือกระหว่าง printf / scanf กับ cin / cout ไม่สามารถใช้ทั้งสองอย่างได้
โจทย์
| Problem | Source | Difficulty | Solution |
|---|---|---|---|
| A+B Problem | PROG | Very Easy | View |
| X2 | PROG | Very Easy | View |