C Academy · บทเรียน

การอ่านอักขระ

getchar และ putchar

บทเรียน 3 จาก 413 ขั้นตอน

การอ่านอักขระ เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

การอ่านอักขระทีละตัว

C มี getchar() สำหรับอ่านอักขระทีละตัวจากอินพุตมาตรฐาน และ putchar() สำหรับเขียนอักขระทีละตัวไปยังเอาต์พุตมาตรฐาน

ทั้งสองฟังก์ชันอยู่ใน <stdio.h>

#include <stdio.h>

int main(void) {
    putchar('H');
    putchar('i');
    putchar('\n');
    return 0;
}

พื้นฐานของ putchar

putchar(c) เขียนอักขระ c และคืนค่าอักขระที่เขียน หรือคืนค่า EOF เมื่อเกิดข้อผิดพลาด

นี่เป็นวิธีที่ง่ายที่สุดในการส่งออกไบต์เดียว

#include <stdio.h>

int main(void) {
    for (char c = 'A'; c <= 'E'; c++) {
        putchar(c);
    }
    putchar('\n');
    return 0;
}

getchar คืนค่าเป็น int

getchar() คืนค่าเป็น int ไม่ใช่ char เรื่องนี้สำคัญเพราะฟังก์ชันต้องสามารถคืนค่า EOF ซึ่งแตกต่างจากอักขระจริงทุกตัวได้

จัดเก็บผลลัพธ์ไว้ใน int เสมอ

#include <stdio.h>

int main(void) {
    int c = 'A';
    printf("Stored value: %d\n", c);
    return 0;
}

EOF คืออะไร

EOF หมายถึงจุดสิ้นสุดของไฟล์ getchar() จะคืนค่านี้เมื่อไม่มีอินพุตเหลืออยู่อีก

โดยทั่วไปค่านี้คือ -1 ดังนั้น getchar จึงใช้ int เพื่อไม่ให้สับสนกับไบต์ 255

#include <stdio.h>

int main(void) {
    printf("EOF has value %d\n", EOF);
    return 0;
}

รูปแบบลูปการอ่าน

รูปแบบมาตรฐานจะอ่านอักขระจนกว่าจะพบ EOF เนื่องจากที่นี่ไม่มีอินพุตแบบโต้ตอบ ลูปจึงจบทันที แต่โครงสร้างนี้เป็นรูปแบบมาตรฐาน

  • กำหนดค่าภายในเงื่อนไข
  • เปรียบเทียบกับ EOF
#include <stdio.h>

int main(void) {
    int c;
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    printf("Reached end of input\n");
    return 0;
}

การนับอักขระ

งานที่พบได้บ่อยคือการนับจำนวนอักขระที่อ่านได้ ให้เพิ่มค่าตัวนับภายในลูปการอ่าน

#include <stdio.h>

int main(void) {
    int c;
    long count = 0;
    while ((c = getchar()) != EOF) {
        count++;
    }
    printf("Read %ld characters\n", count);
    return 0;
}

การสะท้อนเป็นตัวพิมพ์ใหญ่

คุณสามารถแปลงอักขระแต่ละตัวก่อนเขียนได้ ในที่นี้อักขระทุกตัวที่อ่านจะถูกแปลงเป็นตัวพิมพ์ใหญ่ด้วย toupper

#include <stdio.h>
#include <ctype.h>

int main(void) {
    int c;
    while ((c = getchar()) != EOF) {
        putchar(toupper(c));
    }
    return 0;
}

การนับบรรทัด

การนับอักขระขึ้นบรรทัดใหม่จะบอกว่ามีการอ่านมากี่บรรทัด ให้ตรวจสอบอักขระแต่ละตัวกับ '\n'

#include <stdio.h>

int main(void) {
    int c;
    int lines = 0;
    while ((c = getchar()) != EOF) {
        if (c == '\n') lines++;
    }
    printf("Lines: %d\n", lines);
    return 0;
}

การส่งอักขระกลับ

ungetc(c, stdin) ส่งอักขระหนึ่งตัวกลับไปไว้ในกระแสอินพุต เพื่อให้การอ่านครั้งถัดไปได้รับอักขระตัวนั้นอีกครั้ง

วิธีนี้มีประโยชน์เมื่ออ่านอักขระเกินมาหนึ่งตัวขณะสแกน

#include <stdio.h>

int main(void) {
    ungetc('X', stdin);
    int c = getchar();
    printf("Got back: %c\n", c);
    return 0;
}

getchar กับ scanf

getchar ช่วยให้ควบคุมข้อมูลในระดับไบต์ได้อย่างละเอียด ขณะที่ scanf แยกวิเคราะห์อินพุตตามรูปแบบ

สำหรับการประมวลผลทีละอักขระ เช่น ตัวกรองและตัวแบ่งคำโทเค็น getchar เป็นเครื่องมือที่เหมาะสม

#include <stdio.h>

int main(void) {
    int c = '5';
    if (c >= '0' && c <= '9') {
        printf("It is a digit: %c\n", c);
    }
    return 0;
}

โครงร่างตัวกรองอย่างง่าย

ตัวกรองจะอ่านจากอินพุต แปลงข้อมูล แล้วเขียนไปยังเอาต์พุต โครงร่างนี้จะลบช่องว่างทั้งหมดออกจากกระแสอินพุต

#include <stdio.h>

int main(void) {
    int c;
    while ((c = getchar()) != EOF) {
        if (c != ' ') {
            putchar(c);
        }
    }
    return 0;
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเรื่องการอ่านอักขระ

สรุปทบทวน

คุณได้เรียนรู้การอ่านและเขียนอักขระ:

  • getchar() อ่านอักขระหนึ่งตัวและคืนค่าเป็น int
  • putchar(c) เขียนอักขระหนึ่งตัว
  • EOF เป็นสัญญาณสิ้นสุดอินพุต ให้ใช้ลูป while ((c = getchar()) != EOF)
  • ungetc สามารถส่งอักขระกลับไปยังกระแสข้อมูลได้
เริ่มต้นได้ฟรี

เรียนรู้ C ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
39
บทเรียน
144

คำถามที่พบบ่อย

บทเรียน “การอ่านอักขระ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การอ่านอักขระ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การอ่านอักขระ”

getchar และ putchar คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การอ่านอักขระ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม

ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. อักขระในฐานะจำนวนเต็ม
  2. ไลบรารี ctype
  3. การอ่านอักขระ
  4. การสร้างเครื่องมืออักขระ
← กลับไปที่ C Academy