Skip to content

การส่งออกและนำเข้าข้อมูล

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" แล้วขึ้นบรรทัดใหม่

แล้วถ้าเกิดเราอยากส่งออกค่าของตัวแปรล่ะ? เราสามารถทำได้ โดย

cout << variable_1 << variable_2 << ...;
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 คู่กับ >> ฟังก์ชันนี้ใช้สำหรับรับข้อมูลจากผู้ใช้และเก็บลงในตัวแปร ซึ่งจะมีโครงสร้างดันนี้

cin >> variable_1 >> variable_2 >> ...;

ตัวอย่าง เราต้องการนำเข้าข้อมูล 3 ตัวคือ อายุ (age), ราคา (price) และเกรด (grade) ซึ่งจะมาในรูปแบบ อายุ ราคา เกรด (แต่ละข้อมูลจะถูกขั้นด้วยช่องว่าง)

int age;
float price;
char grade;

cin >> age >> price >> grade;

คำแนะนำ

  • cin จะไม่สนใจช่องว่าง หรือการขึ้นบรรทัดใหม่ กล่าวคือ หาก input อยู่คนละบรรทัด สามารถใช้ cin >> a >> b; ได้เลย
  • ไม่จำเป็นต้องสนใจลำดับการ output กับ input เช่น เราไม่จำเป็นต้องเก็บคำตอบไว้ แล้วค่อย output ออกมาทีเดียว หลัง input เสร็จ แต่สามารถ print ได้ทันทีเลย แม้ว่าจะยัง input ไม่ครบ เพราะระบบ Grader แยก input และ output ออกจากกัน

การเพิ่มความเร็วการนำเข้าข้อมูล

เมื่อทำโจทย์ที่มีข้อมูลนำเข้าจำนวนมาก (หลายล้านตัว) cin / cout แบบปกติอาจช้าเกินไป โดยเราสามารถเพิ่มความเร็วของมันได้โดยการเพิ่มโค้ดต่อไปนี้ไว้บนสุดของ int main():

cin.tie(nullptr)->sync_with_stdio(false);

ข้อควรระวัง

หากใช้โค้ดเพิ่มความเร็ว คุณจะต้องเลือกระหว่าง printf / scanf กับ cin / cout ไม่สามารถใช้ทั้งสองอย่างได้

โจทย์

Problem Source Difficulty Solution
A+B Problem PROG Very Easy View
X2 PROG Very Easy View