Ich mache ein einfaches 2D-Spiel im Terminal, und ich habe mich gefragt, wie ich STDIN bekommen konnte, ohne zurückzukehren. Anstatt also den Benutzer w \ n (\ n für die Rückkehr) drücken zu müssen, würden sie einfach 'w' drücken und es würde vorwärts gehen. scanf, gets, und getchar können das nicht, aber ich habe gesehen, dass es vorher in Programmen wie Vi gemacht wurde. Wie würde ich das erreichen?Eingabe erfassen ohne n
2
A
Antwort
2
Sie müssen Ihr Terminal auf den nicht-kanonischen Modus einstellen. Sie können Funktionen wie tcsetattr und tcgetattr zum Festlegen und Abrufen von Terminalattributen verwenden. Hier ist ein einfaches Beispiel:
int main(int argc, const char *argv[])
{
struct termios old, new;
if (tcgetattr(fileno(stdin), &old) != 0) // get terminal attributes
return 1;
new = old;
new.c_lflag &= ~ICANON; // turn off canonical bit.
if (tcsetattr(fileno(stdin), TCSAFLUSH, &new) != 0) // set terminal attributes
return 1;
// at this point, you can read terminal without user needing to
// press return
tcsetattr(fileno(stdin), TCSAFLUSH, &old); // restore terminal when you are done.
return 0;
}
Für weitere Informationen über diese Funktionen finden Sie glibc documentation. Besonders this part.
Ich werde in diese aussehen, aber das sieht aus wie ein guter Weg, es zu tun. – user1150512