Thay thế hàm getch() trong C++

Trong C++ thì dùng hàm gì để thay thế hoàn toàn getch() trong C chuẩn ?

  1. getchar() : sau khi nhập ký tự từ bàn phím phải nhấn Enter -> không nhận được các key như ESC,… (getchar() là hàm của C)
  2. cin.get() : tương tự getchar();
  3. GetAsyncKeyState(VK_ESCAPE) -> trừ phi luôn giữ phím đó không thì bị trôi sang dòng lệnh tiếp theo
    4.kbhit() tương tự (3) (hàm trong C)

Mục đích : nhận các phím đặc biệt như ESC, Home, End,…

5 Likes
system("pause");

Ông này bảo tránh dùng system(“pause”)
http://www.gidnetwork.com/b-61.html
Đắng lòng là ông này khuyên dùng getchar()

2 Likes

mình chỉ muốn dùng nó nhận phím thôi không phải dùng để dừng màn hình console :smile:
Có cách nào không nhỉ ?

Dùng cmd chạy là ok nhất :smile:

@snt2523 nghiên cứu kỹ nhỉ? Sao không sử dụng getch luôn? Có vẻ như bạn đang viết app trên windows mà?

Lý do mà getch đọc ký tự mà không cần enter vì nó không sử dụng buffer.

4 Likes

Tại e thấy getch() nằm trong conio.h trong C. Sử dụng trong C++ thấy sao sao :smiley:

Em bỏ conio.h ra vẫn dùng được getch mà. Anh nhớ không lầm nó thuộc về stdio.h. Nhưng hàm này chỉ hỗ trợ trên Windows thôi.

Cho e hỏi nếu muốn dừng màn hình console trong C++ mà không cần dùng lệnh system (“pause”)
thì làm sao ạ.

Mình nghĩ nếu đã là ứng dụng console thì nên chạy ở terminal hoặc cmd (sẽ không cần lệnh dừng màn hình). Lệnh dừng màn hình chỉ là một thủ thuật thôi, vì ứng dụng thực thế người ta không dùng.
Sau khi bạn dùng IDE để code và build thì bạn mở cmd (Window) hoặc terminal (Linux) để chạy chương trình. Còn nếu muốn debug thì đã có breakpoint để dừng chương trình rồi.

5 Likes

Có thể dùng lệnh scanf hoặc getch, lệnh nào có yêu cầu chờ input từ bàn phím là được.

3 Likes

Dạ e đang lập trình trên Visual ạ… sao e học trên trường thì không cần lệnh gì nó vẫn tự dừng màn hình được mà về nhà làm trên máy thì nó không thể nào dừng được trừ khi phải dùng lệnh system(“pause”).

Vì Visual nó không dừng màn hình lại, cái này là tùy thuộc vào cách chạy chương trình của Visual, không liên quan đến code.

Visual chạy xong là nó tắt luôn cái cmd nên mình mới phải dùng thủ thuật để ngăn Visual tắt nó đi.

1 Like

Anh @ltd cho em hỏi trên linux dùng lệnh gì để đọc kí ký tự mà không cần enter như getch() trên windows?

Bạn dùng hàm std::cin.get() xem sao. Mình thử mấy phím home, esc đều được cả.

1 Like

Mình muốn dùng trên C nữa :grinning:

getchar thì dùng được cả trên c, c++ đấy. bạn thử xem sao.

getchar() phải enter mà bạn

Em kiếm cái này trên mạng
Sử dụng #include “conio.h”
Em dùng tốt trên Ubuntu 14.04
@KuroNeko

#include <termios.h>
#include <unistd.h>
#include <stdio.h>

/* reads from keypress, doesn't echo */
int getch(void)
{
    struct termios oldattr, newattr;
    int ch;
    tcgetattr( STDIN_FILENO, &oldattr );
    newattr = oldattr;
    newattr.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
    return ch;
}

/* reads from keypress, echoes */
int getche(void)
{
    struct termios oldattr, newattr;
    int ch;
    tcgetattr( STDIN_FILENO, &oldattr );
    newattr = oldattr;
    newattr.c_lflag &= ~( ICANON );
    tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
    return ch;
}
1 Like

Chạy tốt :smile: Thanks bạn nhá. Mà không có lệnh nào thay thế nhỉ?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?