Skip to content

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

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 ทั้งในการนำเข้าและส่งออกข้อมูล ซึ่งเวลาส่งออกข้อมูล จะมีโครงสร้างของโค้ดดังนี้

printf("[some text]%FS_1[some text]%FS_2[some_text]...", วแปร1, วแปร2, ...);

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

scanf("%FS_1[ตัวขั้นระหว่างข้อมูล]%FS_2[ตัวขั้นระหว่างข้อมูล]...", &วแปร1, &วแปร2, ...);

คำเตือน

จำเป็นต้องใช้เครื่องหมาย & หน้าชื่อตัวแปรสำหรับการนำเข้าข้อมูล แต่ไม่ต้องใช้สำหรับการส่งออกข้อมูล

ตัวอย่าง เราต้องการนำเข้าข้อมูล 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