在 Linux 下,您可以通過(guò)使用 termios 庫(kù)自定義 getchar() 函數(shù)的行為
#include<stdio.h>
#include <termios.h>
#include <unistd.h>
int my_getchar() {
struct termios old_term, new_term;
int ch;
// 獲取當(dāng)前終端設(shè)置
tcgetattr(STDIN_FILENO, &old_term);
// 復(fù)制舊終端設(shè)置到新設(shè)置
new_term = old_term;
// 關(guān)閉回顯和規(guī)范模式
new_term.c_lflag &= ~(ECHO | ICANON);
// 應(yīng)用新終端設(shè)置
tcsetattr(STDIN_FILENO, TCSANOW, &new_term);
// 讀取一個(gè)字符
ch = getchar();
// 恢復(fù)舊的終端設(shè)置
tcsetattr(STDIN_FILENO, TCSANOW, &old_term);
return ch;
}
int main() {
int ch;
printf("Press any key to continue...\n");
ch = my_getchar();
printf("You pressed: %c\n", ch);
return 0;
}
這個(gè)程序首先獲取當(dāng)前終端設(shè)置,然后創(chuàng)建一個(gè)新的設(shè)置,其中關(guān)閉了回顯和規(guī)范模式。接下來(lái),它將新設(shè)置應(yīng)用于終端,并使用 getchar() 讀取一個(gè)字符。最后,它恢復(fù)舊的終端設(shè)置。
這樣,當(dāng)您運(yùn)行此程序時(shí),它將立即響應(yīng)您的按鍵,而不是等待您按下 Enter 鍵。同時(shí),由于關(guān)閉了回顯,按鍵不會(huì)顯示在屏幕上。