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àm | Nguồn đọc | Lưu ý |
|---|---|---|
| getchar() | stdin | Tương đương getc(stdin) |
| fgetc() | FILE* stream | Hàm chuẩn, an toàn |
| getc() | FILE* stream | Có 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.