在TurboC++中,我可以使用conio.h
中的getch()
函數。但在Linux中,gcc不提供conio.h
。我如何獲得getch()
的功能?如何在Linux中實現C的getch()函數?
回答
getch()
似乎被列入curses library。
如果回顯屏幕不是問題,您可以嘗試使用getchar()
從stdio.h
。
getch()和getchar()之間的唯一區別不是屏幕回顯。 'getch()'在從緩衝區讀取數據之前不等待回車。例如。要使用'getchar()'輸入'a',必須輸入'a [ENTER]'。用'getch()',你只需要輸入'a'。 – 2010-07-18 19:36:22
在Unix中,getch()
是ncurses庫的一部分。但是我爲this question寫了一個解決方法,它可以讓你使用類似getch的功能,而不需要其他的詛咒行李。
試試這個conio.h
文件:
#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;
}
您也可以使用ncurses庫在GCC的類似conio.h
某些功能。
謝謝。很有用! – 2015-08-17 12:09:52
根據這些解決方案code您必須手動使用getch()和getche()函數的開源代碼,如代碼所示,代碼如下。
#include <termios.h>
#include <stdio.h>
static struct termios old, new;
/* Initialize new terminal i/o settings */
void initTermios(int echo)
{
tcgetattr(0, &old); /* grab old terminal i/o settings */
new = old; /* make new settings same as old settings */
new.c_lflag &= ~ICANON; /* disable buffered i/o */
new.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */
tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */
}
/* Restore old terminal i/o settings */
void resetTermios(void)
{
tcsetattr(0, TCSANOW, &old);
}
/* Read 1 character - echo defines echo mode */
char getch_(int echo)
{
char ch;
initTermios(echo);
ch = getchar();
resetTermios();
return ch;
}
/* Read 1 character without echo */
char getch(void)
{
return getch_(0);
}
/* Read 1 character with echo */
char getche(void)
{
return getch_(1);
}
只要把你的代碼主要方法
CONIO.H只有在Dos之前,
爲Linux,使用
sudo apt-get install libncurses-dev
&然後
-lncurses
//在IDE中,您必須鏈接它: 例如:codeblocks,設置 - >編譯器 - >鏈接器設置,並添加'ncurses'
getch()
在libcurses
中。 curses的使用稍微複雜一點,因爲它與底層終端之間的深層鏈接需要進行初始化。對詛咒getch()
與libcurses的初始化工作的例子是在getchar() returns the same value (27) for up and down arrow keys
您可以使用getch()
相當於從libcaca:
__extern int caca_conio_getch (void)
- 1. 如何在Linux中使用c的getch函數?
- 2. Getch()與linux中的顯示函數不兼容C++
- 3. 如何在C中實現rollDice()函數?
- 4. 在C#中實現函數
- 5. 在linux中如何實現stdlib.h文件的system()函數?
- 6. 如何實現簡單的C++函數
- 7. 幫助getch()函數
- 8. 在C++中實現Matlab的fmincon函數
- 9. DFT函數在C中的實現
- 10. 如何在C#中實現真正的函數管道?
- 11. C++:如何在基類的父接口中實現函數?
- 12. 如何在C++的不同函數中實現重定向stdin?
- 13. 如何在PHP中實現SQLite的C用戶函數
- 14. 如何在C++中實現BST的析構函數?
- 15. 如何在C++中使用OpenCV實現高效的im2col函數?
- 16. C++虛函數的實現?
- 17. 如何在data.table中實現J()函數?
- 18. 如何在JavaScript中實現GROWTH函數
- 19. 如何在CoreData中實現函數
- 20. 如何在Swift中實現ROT13函數?
- 21. 如何在scriptlet中實現onclick函數?
- 22. 如何在Haskell中實現函數?
- 23. 如何在OpenCV中實現signum函數?
- 24. 如何在C中實現在C++名稱空間中聲明的函數?
- 25. 在linux中如何實現stdin,stdout,stderr?
- 26. 如何在Linux/Unix中實現GetThreadContext?
- 27. 如何在perl中實現linux查詢?
- 28. epoll_wait如何在Linux中實現x86_64
- 29. 功能如何do_raw_spin_lock在Linux中實現
- 30. 如何在C++ 11中實現make_unique函數?
的Turbo C是dead.Don't使用它。 – 2017-07-31 08:47:20
[conio.h getch()]的Linux等效的可能的重複(https://stackoverflow.com/questions/34474627/linux-equivalent-for-conio-h-getch) – 2018-02-20 04:35:56