Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ค่าที่คืนของ printf() และ scanf() ใน C

ฟังก์ชัน 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