Skip to content

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

ผู้เขียน: 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 ความหมาย
int %d จำนวนเต็ม
long long %lld จำนวนเต็มขนาดใหญ่
float %f จำนวนทศนิยม (ส่งออกทศนิยม 6 หลัก)
float (ทศนิยม 2 หลัก) %.2f จำนวนทศนิยมโดยปัดทศนิยมเป็น 2 หลัก
double %lf จำนวนทศนิยม (ส่งออกทศนิยม 6 หลัก)
char %c ตัวอักษร 1 ตัว

โดยเวลาส่งออกข้อมูล จะมีโครงสร้างดังนี้

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

โดยที่ Format Specifier จะไปจับคู่กับตัวแปรตามลำดับ ซึ่งระหว่าง Format Specifier อาจจะมีข้อความอื่นๆ อยู่ด้วยก็ได้

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);

โจทย์

Problem Source Difficulty Editorial
A+B Problems PROG Very Easy View