Tất cả đều là hàm nhập ký tự từ input stream trong ngôn ngữ C/C++ (không phải Java). Mỗi hàm có hành vi khác nhau về buffering, echo, và luồng nhập.
1. getc()
- Header:
<stdio.h> - Đọc từ: Bất kỳ
FILE*stream nào (stdin, file, pipe...). - Buffering: Có buffer (buffered).
- Echo: Không hiển thị ký tự nhập ra màn hình.
- Trả về:
int(ký tự đọc được) hoặcEOFkhi lỗi/hết file.
int getc(FILE *stream);
2. getchar()
- Header:
<stdio.h> - Đọc từ: Chỉ stdin (standard input).
- Buffering: Có buffer (thường line-buffered).
- Echo: Không hiển thị.
- Trả về:
intký tự hoặcEOF. - Tương đương:
getc(stdin).
int getchar(void);
3. getch()
- Header:
<conio.h>(Non-standard, chỉ Windows/DOS - Turbo C, Visual Studio cũ). - Đọc từ: Console (stdin) nhưng không qua buffer (unbuffered).
- Echo: KHÔNG hiển thị ký tự vừa nhập.
- Trả về:
intký tự ngay lập tức, không chờ Enter. - Dùng cho: Menu điều khiển, game, nhập mật khẩu (che ký tự).
int getch(void);
4. getche()
- Header:
<conio.h>(Non-standard, Windows/DOS). - Đọc từ: Console, unbuffered.
- Echo: CÓ hiển thị ký tự vừa nhập ra màn hình.
- Trả về:
intký tự ngay lập tức. - Khác biệt với getch(): Chỉ khác ở việc echo ký tự.
int getche(void);
Bảng so sánh tóm tắt
| Hàm | Header | Stream | Buffer | Echo | Chờ Enter? | Portable? |
|---|---|---|---|---|---|---|
getc() | stdio.h | FILE* bất kỳ | Có | Không | Có (line-buffered) | ✅ ANSI C |
getchar() | stdio.h | stdin | Có | Không | Có | ✅ ANSI C |
getch() | conio.h | Console | Không | Không | Không | ❌ Windows only |
getche() | conio.h | Console | Không | Có | Không | ❌ Windows only |
Ví dụ minh họa (Chạy trên Windows với conio.h)
#include
#include
int main() {
printf("Test getc(stdin): ");
int c1 = getc(stdin); // Nhập 'A', Enter -> c1 = 'A'
putchar(c1); putchar('\n');
printf("Test getchar(): ");
int c2 = getchar(); // Nhập 'B', Enter -> c2 = 'B'
putchar(c2); putchar('\n');
printf("Test getch() - nhập 1 ký tự (ko hiển thị): ");
int c3 = getch(); // Nhấn 'C' -> c3 = 'C', KHÔNG in ra màn hình
printf("\nĐã nhập (từ biến): %c\n", c3);
printf("Test getche() - nhập 1 ký tự (có hiển thị): ");
int c4 = getche(); // Nhấn 'D' -> in ra 'D' ngay lập tức
printf("\nĐã nhập (từ biến): %c\n", c4);
return 0;
}
Kết quả mẫu
Test getc(stdin): A A Test getchar(): B B Test getch() - nhập 1 ký tự (ko hiển thị): Đã nhập (từ biến): C Test getche() - nhập 1 ký tự (có hiển thị): D Đã nhập (từ biến): D
Lưu ý quan trọng
- Không phải Java: Đây là hàm C/C++. Java dùng
System.in.read(),Scanner,Console.readPassword(). conio.hkhông chuẩn (non-standard), không chạy trên Linux/macOS chuẩn. Trên Linux dùngtermioshoặc thư việnncurses.getch()/getche()thường dùng cho: nhập mật khẩu (getch), menu real-time, game console.- Trong C hiện đại, ưu tiên
getchar()hoặcfgetc()cho portable code.
Tương đương trong Java
| C Function | Java Equivalent |
|---|---|
getchar() | System.in.read(), Scanner.next().charAt(0) |
getch() (no echo) | Console.readPassword() (return char[]), hoặc JLine/JNA |
getche() (echo) | Scanner.next().charAt(0) (nhưng có buffer, chờ Enter) |
Java không có built-in unbuffered console input không echo như getch(). Cần thư viện ngoài (JLine, Lanterna) hoặc JNI.