Tastendruck in C Abrufen während einem schleifendurchlauf ohne Unterbrechung
-
Hallo
Ich möchte während dem Durchlauf einer Schleife die Schleife abbrechen wenn irgendeine Taste gedrückt wird.
in C++ geht das mit kbhit() ... diese Funktion gibt es aber in C nicht...
getchar() hält die Schleife an ...das soll aber nicht geschehen ...
Die Schleife soll weiterlaufen bis eine Taste gedrückt wird...
könnt Ihr mir helfen ?
zum Programm .... Ich versuche den Matrix Bildschirmschoner in der Console von Ubuntu nach zu armen... Die Schleife schreibt die Code Zeilen auf die Console aber der Abbruch des Programms geht nicht ohne str + C oder einem definierten ende der Schleife.... beides ist nicht erwünscht ...
Vielen Dank im Voraus für eure Bemühungen
hier noch der Code:
void hasteNichGesehen (int x,int hoehe) { int y,i,d; char c; for (y=30+hoehe;y>hoehe;y--) { i = rand() % 92 + 32; d = rand() % 16 +1; printf("\033[1m "); if (verbose==0) { printf("\033[%d;%dH \033[32m %c",y,x,i); } else { gotoxy(x,y); switch (d) { case 1:printf("\033[31m %c",i);break; case 2:printf("\033[32m %c",i);break; case 3:printf("\033[33m %c",i);break; case 4:printf("\033[34m %c",i);break; case 5:printf("\033[35m %c",i);break; case 6:printf("\033[36m %c",i);break; case 7:printf("\033[37m %c",i);break; case 8:printf("\033[38m %c",i);break; case 9:printf("\033[1;30m %c",i);break; case 10:printf("\033[1;31m %c",i);break; case 11:printf("\033[1;32m %c",i);break; case 12:printf("\033[1;33m %c",i);break; case 13:printf("\033[1;34m %c",i);break; case 14:printf("\033[1;35m %c",i);break; case 15:printf("\033[1;36m %c",i);break; case 16:printf("\033[1;37m %c",i);break; /*case 17:printf("\033[1;3m %c",i);break; case 18:printf("\033[1;3m %c",i);break; case 19:printf("\033[1;40m %c",i);break; case 20:printf("\033[1;41m %c",i);break; case 21:printf("\033[1;42m %c",i);break; case 22:printf("\033[1;43m %c",i);break; case 23:printf("\033[1;44m %c",i);break; case 24:printf("\033[1;45m %c",i);break;*/ } } } } int main (int argc, char* argv[]) { int i,x,y; for (i = 1;i < argc;i++) { if (strcmp("-v",argv[i])==0) { verbose = 1; }else if (strcmp("-v1",argv[i])==0) { verbose = 2; } } printf("\033[40m"); clrscr(); clrscr(); srand(time(NULL)); for (i=20005;i>0;i--) { x = rand() % 192; y = rand() % 50 ; hasteNichGesehen(x,y); } printf("\033[0m"); clrscr(); clrscr(); gotoxy(0,0); return 0; }
die gotoxy(x,y); Funktion habsch mal weggelassen weil darüber ein vereinfachter Aufruf mit gleicher Funktionalität steht...
-
Vieleicht kann dir das helfen
Da gibt es eine unsichtbare Eingabeaufforderung...
-
katmai schrieb:
in C++ geht das mit kbhit() ... diese Funktion gibt es aber in C nicht...
wenn irgendeine systemspezifische library 'kbhit()', dann müsstest du die eigentlich in beiden sprachen benutzen können.
-
kbhit() ist glaube ich eine Funktion der Borland C/C++ - Compiler. Unter Windows könnte Dir PeekConsoleInput weiterhelfen.
-
Belli schrieb:
kbhit() ist glaube ich eine Funktion der Borland C/C++ - Compiler. Unter Windows könnte Dir PeekConsoleInput weiterhelfen.
kbhit bzw. _kbhit gibt es auch in VC++.
-
#include <conio.h>
-
hi,
da er unter ubuntu programmiert wird er mit conio und co nicht glücklich werden.
das problem kannst du folgendermaßen beheben. ich hat das problem selbst, als ich eine übung "snake" für die linux shell programmiert habe.
in dieser programmvorlage ist die lösung bereits integriert:
http://www.c-howto.de/tutorial-uebungen-spiel-snake-vorlage.htmlspeziell zu deinem problem brauchst du folgende zeilen:
static struct termio savemodes; static int havemodes = 0; int tty_break(); int tty_getchar(); int tty_fix(); .... /* statt getchar() dann dies: */ key=tty_getchar(); ... int tty_break() { struct termio modmodes; if(ioctl(fileno(stdin), TCGETA, &savemodes) < 0) return -1; havemodes = 1; modmodes = savemodes; modmodes.c_lflag &= ~ICANON; modmodes.c_cc[VMIN] = 1; modmodes.c_cc[VTIME] = 0; return ioctl(fileno(stdin), TCSETAW, &modmodes); } int tty_getchar() { return getchar(); } int tty_fix() { if(!havemodes) return 0; return ioctl(fileno(stdin), TCSETAW, &savemodes); }
-
-
danke, sie ist aber leider noch zu unbekannt
-
c-howto.de schrieb:
danke, sie ist aber leider noch zu unbekannt
Schreib deine Seite doch zu den Links für anfänger...
-
danke fuer den tipp, hatte den link bisher nur der redaktion gemailt - ohne antwort.