1. บทนำ
ในภาษา C จะใช้ตัวกำหนดรูปแบบ (Format Specifier) เพื่อแสดงผลหรือรับค่าข้อมูลตัวเลขและสตริง โดยเฉพาะเมื่อทำงานกับจำนวนทศนิยมแบบลอยตัว (Floating Point) การทำความเข้าใจความแตกต่างระหว่างตัวกำหนด %f และ %lf เป็นสิ่งสำคัญต่อการเขียนโปรแกรมที่ถูกต้อง บทความนี้จะมุ่งเน้นไปที่การใช้งาน %lf ซึ่งรองรับชนิดข้อมูลทศนิยมความแม่นยำสองเท่า (double) พร้อมอธิบายวิธีใช้ในฟังก์ชัน printf และ scanf รวมถึงความแตกต่างจากตัวกำหนดอื่นๆ
2. ตัวกำหนดรูปแบบคืออะไร
ตัวกำหนดรูปแบบคือสัญลักษณ์ที่ใช้กำหนดรูปแบบการแสดงผลหรือการรับข้อมูลในภาษา C การใช้ตัวกำหนดให้เหมาะกับชนิดข้อมูล จะช่วยให้การรับและแสดงผลข้อมูลมีความถูกต้อง มาดูตัวอย่างตัวกำหนดรูปแบบที่ใช้บ่อยและชนิดข้อมูลที่รองรับ
ตัวกำหนดรูปแบบหลักและชนิดข้อมูลที่รองรับ
| ตัวกำหนดรูปแบบ | ชนิดข้อมูลที่รองรับ |
|---|---|
%d | ชนิด int (จำนวนเต็ม) |
%f | ชนิด float (ทศนิยมความแม่นยำเดี่ยว) |
%lf | ชนิด double (ทศนิยมความแม่นยำสองเท่า) |
%Lf | ชนิด long double (ทศนิยมความแม่นยำขยาย) |
3. การใช้ %lf ในฟังก์ชัน printf
ฟังก์ชัน printf ในภาษา C ใช้เพื่อแสดงผลข้อมูลตามรูปแบบที่กำหนด เมื่อต้องการแสดงผลค่าทศนิยมความแม่นยำสองเท่า สามารถใช้ได้ทั้ง %f และ %lf แต่จะมีความแตกต่างเล็กน้อยในการใช้งาน
ความแตกต่างระหว่าง %lf และ %f ใน printf
ใน printf ทั้ง %f และ %lf สามารถใช้แสดงผลชนิด double ได้เหมือนกัน เนื่องจาก printf จะทำการแปลงอาร์กิวเมนต์แบบทศนิยมให้เป็น double โดยอัตโนมัติ ดังนั้นโดยทั่วไปจะนิยมใช้ %f ในการแสดงผลค่าทศนิยมความแม่นยำสองเท่า
ตัวอย่างการใช้งาน
#include <stdio.h>
int main() {
double num = 3.14159;
printf("%f\n", num); // ผลลัพธ์: 3.141590
printf("%lf\n", num); // ผลลัพธ์: 3.141590
return 0;
}จากตัวอย่าง จะเห็นว่าได้ผลลัพธ์เหมือนกันทั้งสองแบบ แต่โดยมาตรฐานแล้วจะใช้ %f สำหรับการแสดงผลชนิด double ใน printf
4. การใช้ %lf ในฟังก์ชัน scanf
ฟังก์ชัน scanf ใช้เพื่อรับค่าที่ผู้ใช้ป้อนและเก็บลงในตัวแปรชนิดที่กำหนด ใน scanf การจับคู่ตัวกำหนดกับชนิดข้อมูลของตัวแปรเป็นสิ่งสำคัญ และในจุดนี้จะต้องแยกการใช้ %f และ %lf ให้ถูกต้อง
ความแตกต่างระหว่าง %lf และ %f ใน scanf
%f: ใช้เมื่อรับค่าลงในตัวแปรชนิดfloat%lf: ใช้เมื่อรับค่าลงในตัวแปรชนิดdoubleต้องใช้%lfเสมอเมื่อรับค่าลงในdouble
ตัวอย่างการใช้งาน
#include <stdio.h>
int main() {
double num;
printf("กรุณาป้อนตัวเลข: ");
scanf("%lf", &num); // เก็บค่าที่ป้อนไว้ในตัวแปร double
printf("ค่าที่ป้อนคือ: %f\n", num);
return 0;
}ดังนั้น เมื่อรับค่าทศนิยมความแม่นยำสองเท่าด้วย scanf ต้องใช้ %lf หากใช้ผิด เช่นใช้ %f อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด
5. ข้อควรระวังในการใช้ %lf
การใช้ %lf ต้องจับคู่กับตัวแปรชนิด double โดยเฉพาะใน scanf หากชนิดข้อมูลและตัวกำหนดไม่ตรงกัน อาจทำให้เกิดข้อผิดพลาดหรือผลลัพธ์ไม่ถูกต้อง
ความผิดพลาดที่พบบ่อยและวิธีที่ถูกต้อง
ตัวอย่างที่ผิด
#include <stdio.h>
int main() {
float num;
printf("กรุณาป้อนตัวเลข: ");
scanf("%lf", &num); // ใช้ตัวกำหนดไม่ถูกต้อง
return 0;
}ตัวอย่างที่ถูกต้อง
#include <stdio.h>
int main() {
double num;
printf("กรุณาป้อนตัวเลข: ");
scanf("%lf", &num); // ใช้ตัวกำหนดถูกต้อง
return 0;
}ในการใช้ scanf ต้องแน่ใจว่าตัวกำหนดและชนิดข้อมูลตรงกัน

6. ความแตกต่างจากตัวกำหนดอื่น
การเข้าใจตัวกำหนดอื่นๆ นอกจาก %lf จะช่วยให้สามารถเลือกใช้ได้เหมาะสมกับงาน
ตัวกำหนดรูปแบบหลักและการใช้งาน
%f: ใช้กับข้อมูลชนิดfloat(และdoubleในprintf)%Lf: ใช้กับข้อมูลชนิดlong double%e/%E: ใช้แสดงผลแบบวิทยาศาสตร์ (Scientific notation)
ตัวอย่างและคำอธิบายความแตกต่าง
#include <stdio.h>
int main() {
long double num_long_double = 3.14159265358979323846L;
printf("แสดงผล long double: %Lf\n", num_long_double);
printf("แสดงผลแบบวิทยาศาสตร์: %e\n", num_long_double);
return 0;
}การเลือกตัวกำหนดให้ตรงกับชนิดข้อมูลจะช่วยให้ผลลัพธ์ถูกต้องและแม่นยำ
7. สรุป
เราได้อธิบายการใช้ตัวกำหนด %lf สำหรับชนิด double ในภาษา C โดยมีประเด็นสำคัญดังนี้
printf: ใช้ได้ทั้ง%fและ%lfแต่โดยทั่วไปใช้%fscanf: ใช้%lfกับdoubleและใช้%fกับfloatต้องให้ตัวกำหนดและชนิดข้อมูลตรงกัน- ข้อควรระวัง: หากใช้ตัวกำหนดไม่ตรงกับชนิดข้อมูล โดยเฉพาะใน
scanfอาจทำให้เกิดข้อผิดพลาด




