Thứ Năm, 11 Tháng Tám 2022
Trang chủLập trìnhLập trình C/C++Hàm getch() - Lệnh bắt phím nhấn trong lập trình C/C++

Hàm getch() – Lệnh bắt phím nhấn trong lập trình C/C++

DANH SÁCH BẢI VIẾT
Viết hàm thay đổi vị trí dấu nhái trong màn hình console C/C++
Lệnh tạm dừng và lệnh tạm dừng trong khoảng thời gian lập trình C/C++
Lệnh xóa màn hình Console trong C/C++ – Cách Reset màn hình Console
Viết hàm thay đổi màu chữ trong màn hình console C/C++
Viết hàm thay đổi kích thước màn hình console C/C++
Tạo âm thanh bíp trong C/C++ với hàm Beep
Hàm getch() - Lệnh bắt một phím nhấn
Hàm Kbhit() – Lệnh kiểm tra có sự kiện nhấn phím
Tạo chuyển động cơ bản trong Console C/C++ – Điều khiển chuyển động
Tỏ tình Crush bằng code C/C++ – I LOVE YOU ngôn ngữ C/C++
Xây dựng demo Code Vượt vật cản trên màn hình Console C/C++
Lập trình game Rắn săn mồi trên C/C++ màn hình Console(Demo Snake
Lập trình ứng dụng giúp bé học toán trên C/C++ màn hình Console
Lập trình game Cờ Caro trên C/C++ màn hình Console(Demo Game)

Trong bài viết này chúng ta sẽ tìm hiểu về hàm gectch, tác dụng và bản chất thực sự của hàm getch trong C/C++.

Hàm getch() trong C/C++

Hàm getch() nằm trong thư viện conio.h.

Khi mới bắt đầu học lập trình thì mình đã từng nhầm tưởng rằng hàm getch lệnh dừng màn hình, và mình cũng tin rằng trong số các bạn cũng sẽ có một vài bạn nhầm lẫn như mình. Khi mới học năm nhất đại học và bắt đầu làm quen với lập trình C/C++, giảng viên dạy môn lập trình của mình thường để hàm này cuối chương trình nhằm mục đích khi thực hiện xong lệnh chương trình sẽ không bị out ngay mà màn hình sẽ dừng lại để ta có thể theo dõi dễ dàng. Không biết là vì lý do gì nhưng giảng viên của mình đã không giải thích rõ hàm này, và nói với đám sinh viên tụi mình là hàm này chính là lệnh dừng màn hình, cho đến khi tự tìm hiểu trên google thì mình mới hiểu đúng về hàm này.

Hàm getch() bản chất nó là một lệnh bắt vào 1 ký tự phím nhấn từ bộ nhớ đệm, tại sao lại có thể dùng hàm này để làm lệnh dừng màn hình thì có thể hiểu thế này. Khi bạn chưa nhấn bất kì ký tự nào(hoặc bạn đã nhấn ký tự nhưng trong lệnh nhập thì lệnh nhập đã bắt hết phím nên bộ nhớ đệm vẫn sẽ không lưu phím) thì khi gặp lệnh này chương trình sẽ dừng lại và chờ đợi khi nào mà ta nhấn vào 1 phím nhấn lúc đó phím nhấn sẽ được lưu vào bộ nhớ đệm và hàm này mới có thể bắt lấy phím nhấn đó và chương trình sẽ vượt qua được hàm này, vì thế nên khi mới học lập trình nhiều người hay dùng hàm này thay thế lệnh dừng màn hình.

Vì là lệnh bắt vào một ký tự chứ không phải lệnh nhập, vì thế nên các bạn sẽ thấy nó không giống như các lệnh nhập khi bấm 1 phím bấm nó sẽ ngay lập tức ghi phím vừa nhấn lên màn hình. Hàm getch không như vậy, đơn thuần hàm chỉ bắt lấy phím nhấn, và để lấy được phím đó thì ta có thể gắn nó vào một biến.

Code minh họa sử dụng hàm getch()

#include <stdio.h>
#include <conio.h>
int main()
{
	char c = getch(); //Bắt lấy 1 ký tự phím nhấn và gắn nó vào biến c
	
	//In biến c 4 lần ra màn hình
	printf("\n----------IN KY TU VUA BAT --------\n");
	printf("%c\n", c);
	printf("%c\n", c);
	printf("%c\n", c);
	printf("%c\n", c);
}

Kết quả khi chạy chương trình

Bạn hãy chạy thử chương trình nhé, nó sẽ có khác biệt khá nhiều so với một lệnh nhập đấy.

Hàm gecth() và hàm kbhit() – Lệnh kiểm tra nếu có sự kiện phím nhấn sảy ra, sẽ thường hay được sử dụng kết hợp với nhau để ứng dụng trong một số trường hợp xử lý sự kiện. Một ví dụ như trong game rắn săn mồi, con rắn sẽ di chuyển một cách liên tục vì thế nên ta không thể đặt ngay lệnh bắt phím vào trong đoạn chương trình xử lý sự kiện di chuyển một cách bình thường được, như vậy lệnh bắt phím sẽ khiến chương trình dừng lại, mà không đặt lệnh bắt phím thì ta không thể bắt được và xử lý sự kiện làm sao để biết khi nào rắn đổi hướng. Và cụ thể kết hợp với hàm kbhit() ra sao chúng ta sẽ cùng tiếp hiểu ngay trong bài viết tiếp theo.

Cảm ơn bạn đã đọc bài viết, chúc bạn học tốt! sớm trở thành một Pro Dev.

[Xem tất cả bài viết chủ đề C/C++ tại đây]

0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?


0
Giáo sư! có thể ném gạch bên dưới nhé!x
()
x