Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>kbhit() & getch()

kbhit() & getch()

Moe99999
Moe9999925.01.0819:07
Hallo Forum,

für ein kleines C-Komandozeilenspiel das ich in der Schule für windows geschrieben habe brauche ich zwei Befhele um es auf den mac zum laufen zu bringen:
kbhit() und getch() diese beiden Befehle gibt es aber nur unter windows, jedenfalls soweit ich weiß.

Ich brauche eigentlich nur eine Möglichkeit einen Tastendruck zu registrieren und gleichzeitig einzulesen, aber nur wenn eine Taste gedrückt wird, sonst nicht.. hier mein windows code:


 if(kbhit()){
                                 char ctrl=getch();
                                 switch (ctrl) {
                                      case 'a':
................

 

„42“
0

Kommentare

Moe99999
Moe9999925.01.0819:07
}
„42“
0
Rantanplan
Rantanplan25.01.0819:42
Eine Möglichkeit das kbhit() nachzubauen gibt es hier:
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
0
Rantanplan
Rantanplan25.01.0819:44
Oder da:

Soll ich noch den Rest der Google-Suchergebnise reinkopieren?
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
0
Moe99999
Moe9999925.01.0820:23
error: 'memcpy' was not declared in this scope
fehler bei kbhit()

aber getch() geht jetzt

„42“
0
Moe99999
Moe9999925.01.0820:26
int kbhit(void) {
struct termios term, oterm;
int fd = 0;
int c = 0;
tcgetattr(fd, &oterm);
memcpy(&term, &oterm, sizeof(term)); //Fehler..
term.c_lflag = term.c_lflag & (!ICANON);
term.c_cc[VMIN] = 0;
term.c_cc[VTIME] = 1;
tcsetattr(fd, TCSANOW, &term);
c = getchar();
tcsetattr(fd, TCSANOW, &oterm);
if (c != -1)
ungetc(c, stdin);
return ((c != -1) ? 1 : 0);
}
„42“
0
Rantanplan
Rantanplan25.01.0823:34
Hast du
#include <string.h>
weggelassen?
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
0
Moe99999
Moe9999928.01.0816:57
also kbhit() geht offensichtlich, aber das getch() arbeitet völlig anders als das aus der conio.h..
„42“
0
iCode
iCode07.02.0808:43
Benutz einfach die curses, die implementiert die Funktionalität der conio zur Kompatibilität.
0
iCode
iCode07.02.0808:49
Wenn man das häufig benötigt, aber man besonders bequem ist und die Includes nicht immer ändern will, bastelt man sich einfach eine Bridge. So in dieser Art:
/*
 *  conio.h
 * Bridge zwischen curses und conio
 */

#include "curses.h"

Und packt diese in die entsprechenden Verzeichnisse:
/usr/include/
/Developer/SDKs/MacOSX10.5.sdk/usr/include/
/Developer/SDKs/MacOSX10.4u.sdk/usr/include/
/Developer/SDKs/MacOSX10.3.9.sdk/usr/include/

Fertig.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.