Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Kiểu trả về của getchar(), fgetc() và getc() trong C

Ba hàm này đọc một ký tự và trả về kiểu int (không phải char) để có thể biểu diễn cả EOF (thường là -1).

getchar()

Đọc ký tự từ stdin. Trả về ký tự dạng int hoặc EOF nếu lỗi/het file.

Ví dụ

#include <stdio.h>

int main() {
    int c;
    printf("Nhap mot ky tu: ");
    c = getchar();
    printf("Ky tu vua nhap: ");
    putchar(c);
    return 0;
}

Kết quả

Nhap mot ky tu: G
Ky tu vua nhap: G

fgetc()

Đọc ký tự từ file stream (FILE*). Trả về int hoặc EOF.

Ví dụ

#include <stdio.h>

int main() {
    FILE *fp = fopen("file.txt", "w");
    fprintf(fp, "Apple");
    fclose(fp);
    
    fp = fopen("file.txt", "r");
    if (!fp) { perror("Loi mo file"); return -1; }
    
    int c;
    while ((c = fgetc(fp)) != EOF)
        putchar(c);
    
    fclose(fp);
    return 0;
}

Kết quả

Apple

getc()

Tương tự fgetc() nhưng có thể là macro. Đọc từ stream chỉ định. Trả về int hoặc EOF.

Ví dụ

#include <stdio.h>

int main() {
    int c;
    printf("Nhap ky tu: ");
    c = getc(stdin);
    printf("Ky tu: ");
    putchar(c);
    return 0;
}

Kết quả

Nhap ky tu: K
Ky tu: K

So sánh

HàmNguồn đọcLưu ý
getchar()stdinTương đương getc(stdin)
fgetc()FILE* streamHàm chuẩn, an toàn
getc()FILE* streamCó thể là macro, nhanh hơn
Quan trọng: Luôn gán kết quả vào biến int, không phải char, để so sánh với EOF đúng cách.