In TurboC++ kann ich die getch()
Funktion von conio.h
verwenden. Unter Linux stellt gcc conio.h
jedoch nicht zur Verfügung. Wie kann ich die Funktionalität von getch()
bekommen?Wie implementiert man getch() - Funktion von C in Linux?
Antwort
Check out Flüche:
http://en.wikipedia.org/wiki/Curses_%28programming_library%29
getch()
scheint in curses library aufgenommen werden.
Wenn das Echo auf dem Bildschirm kein Problem ist, können Sie versuchen, getchar()
von stdio.h
zu verwenden.
Echo auf den Bildschirm ist nicht der einzige Unterschied zwischen 'getch()' und 'getchar()'. 'getch()' wartet nicht auf eine Zeilenschaltung, bevor es aus dem Puffer liest. Z.B. Um 'a' mit 'getchar()' einzugeben, müssen Sie 'a [ENTER]' eingeben. Mit 'getch()' brauchst du nur 'a'. –
In Unix ist getch()
Teil der Ncurses-Bibliothek. Aber ich habe einen Workaround für this question geschrieben, mit dem Sie getch-ähnliche Funktionen ohne den Rest des Fluchgepäcks nutzen können.
Versuchen Sie, diese conio.h
Datei:
#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;
}
Sie auch die ncurses Bibliothek in gcc für einige Funktionen ähnlich wie conio.h
verwenden können.
Danke. Sehr hilfreich! –
Nach dieser Lösung code müssen Sie Open Source-Code für getch() und getche() -Funktion manuell verwenden, wie beschrieben der Code wie folgt ist.
#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);
}
Setzen Sie ihn einfach vor Ihrem Hauptverfahren Code
conio.h ist nur in Dos,
für Linux verwenden
sudo apt-get install libncurses-dev
& dann
-lncurses
// In IDE, müssen Sie es verlinken: zum Beispiel: Codeblöcke, Einstellung -> Compiler -> Linker Einstellung und fügen 'ncurses'
getch()
in libcurses
ist. Die Verwendung von Curses ist ein wenig komplexer, weil es tiefe Verbindungen zum darunterliegenden Terminal hat und initialisiert werden muss. ein Arbeitsbeispiel für Flüche getch()
mit Initialisierung von libcurses ist in getchar() returns the same value (27) for up and down arrow keys
Sie äquivalente getch()
von libcaca verwenden:
__extern int caca_conio_getch (void)
- 1. Wie implementiert man JavaScript-Funktion?
- 2. Wie implementiert man eine "private/restricted" -Funktion in C?
- 3. Wie implementiert/berechnet man diese Funktion in objective-c?
- 4. Wie kbhit und getch (C-Programmierung)
- 5. implizite Deklaration der Funktion 'getch'
- 6. Getch gibt -1 zurück?
- 7. Alternative Funktion in iostream.h für getch() von conio.h?
- 8. Wie implementiert man IListSource-Schnittstelle in C++
- 9. Gibt es eine Entsprechung von getch() aus C++ in Java?
- 10. Wie implementiert man ein Bitset in C?
- 11. Wie man threadsichere Referenzzählung in C++ implementiert
- 12. Wie implementiert man CAS in C++ 11
- 13. Wie implementiert man Funktion mit Nebenwirkungen?
- 14. Wie wird sbrk/brk in Linux implementiert?
- 15. getch ist veraltet
- 16. Wie implementiert man selektive Sichtbarkeit von Eigenschaften in C#?
- 17. Wie implementiert man das ISpeechPhraseElement von sapi 5.1 in C#?
- 18. Wie implementiert man das "didset von swift" in objective-c?
- 19. Entspricht Windows getch() für Mac/Linux stürzt ab
- 20. MWPhotoBrowser - Wie implementiert man die Funktion zum Löschen von Fotos?
- 21. Wie implementiert man einen Stacktrace in C++ (von werfen zu fangen Website)?
- 22. Wie implementiert man die Exportieren nach Excel-Funktion in SAPUI5?
- 23. Wie implementiert man die ReLU-Funktion in Numpy
- 24. Wie implementiert man "Feedback senden" -Funktion in Android?
- 25. Wie implementiert man eine Mismatch-Kernel-Funktion in MATLAB?
- 26. Wie implementiert man die Python `zip` Funktion in Golang?
- 27. Wie würde eine sdbm-Hash-Funktion in C# implementiert werden?
- 28. Rohr() Funktion in Linux
- 29. Gibt es in C++ eine standardmäßige getch() - Entsprechung?
- 30. Wie implementiert man Textauswahl?
turbo c ist dead.Don't sie verwenden. –
Mögliches Duplikat von [Linux Equivalent für conio.h getch()] (https://stackoverflow.com/questions/34474627/linux-equivalent-for-conio-h-getch) –