ฟังก์ชัน printf() และ scanf() เป็น Library Functions ใน <stdio.h> ที่คืนค่าข้อมูลสำคัญซึ่งมักถูกมองข้าม
printf() - ค่าที่คืน
printf() คืนค่า จำนวนตัวอักษรที่พิมพ์สำเร็จ (Number of Characters Printed) หากเกิดข้อผิดพลาด จะคืนค่า ลบ (Negative Value)
ตัวอย่าง
#include <stdio.h>
int main() {
char str[] = "THE SKY IS BLUE";
// printf() ทั้งพิมพ์สตริง และคืนค่าจำนวนตัวอักษร
int charsPrinted = printf("%s", str);
printf("\nThe value returned by printf() for the above string is : %d", charsPrinted);
return 0;
}
ผลลัพธ์
THE SKY IS BLUE
The value returned by printf() for the above string is : 15
คำอธิบาย: สตริง "THE SKY IS BLUE" มี 15 ตัวอักษร (รวม Space)
scanf() - ค่าที่คืน
scanf() คืนค่า จำนวน Input Items ที่อ่านสำเร็จและกำหนดให้ตัวแปรได้ (Number of Successful Assignments) หากเกิด Input Failure หรือ EOF ก่อนอ่านอะไรได้ จะคืนค่า EOF (มักเป็น -1)
ตัวอย่าง
#include <stdio.h>
int main() {
int x, y, z;
printf("Enter three integers: ");
int ret = scanf("%d %d %d", &x, &y, &z);
printf("The value returned by scanf() function is : %d\n", ret);
printf("x = %d\n", x);
printf("y = %d\n", y);
printf("z = %d\n", z);
return 0;
}
ผลลัพธ์ (Input: 7 5 4)
Enter three integers: 7 5 4
The value returned by scanf() function is : 3
x = 7
y = 5
z = 4
ตารางเปรียบเทียบ
| ฟังก์ชัน | ค่าที่คืนเมื่อสำเร็จ | ค่าที่คืนเมื่อล้มเหลว |
|---|---|---|
| printf() | จำนวนตัวอักษรที่พิมพ์ (≥ 0) | ค่าลบ (Negative) |
| scanf() | จำนวน Items ที่ Assign สำเร็จ (≥ 0) | EOF (มักเป็น -1) |
ความสำคัญของการตรวจสอบ Return Value
สำหรับ scanf() - สำคัญมาก!
int x;
if (scanf("%d", &x) != 1) {
// Input ไม่ใช่ตัวเลข หรือ EOF
fprintf(stderr, "Invalid input\n");
return 1;
}
// ใช้ x ได้อย่างปลอดภัย
สำหรับ printf() - สำหรับ Debug/Logging
int len = printf("Processing...\n");
if (len < 0) {
// Output Error (Disk Full, Pipe Broken, etc.)
}
ตัวอย่างขั้นสูง: ใช้ Return Value ควบคุม Loop
#include <stdio.h>
int main() {
int num, sum = 0, count = 0;
printf("Enter numbers (non-number to stop): ");
// scanf คืน 1 ถ้าอ่าน int สำเร็จ, 0 ถ้า Input ไม่ตรง Format, EOF ถ้าจบไฟล์
while (scanf("%d", &num) == 1) {
sum += num;
count++;
}
printf("Count: %d, Sum: %d, Average: %.2f\n", count, sum, count ? (float)sum/count : 0);
return 0;
}
ข้อผิดพลาดที่พบบ่อย
- ไม่ตรวจสอบ Return Value ของ
scanf()- นำไปสู่การใช้ตัวแปรที่ยังไม่ได้ Initialize - เข้าใจผิดว่า
scanf()คืนค่าที่อ่านได้ (คืนจำนวน Assignments ไใช่ค่าที่อ่าน) - ลืมว่า
printf()คืนจำนวน Characters ไม่ใช่จำนวน Arguments
สรุป
ตรวจสอบ Return Value ของ scanf() ทุกครั้ง เพื่อความปลอดภัย สำหรับ printf() ตรวจสอบเมื่อ Critical Output Operations