Schleife abrechen mit tastendruck...
-
Das Programm gibt farbige Rechtecke an beliebiger stelle aus...Die Funktion wird in einer Schleife ausgegeben.Wenn ich nun will das die Schleife mit einem Tastendruck unterbrochen werden soll,wie stelle ich das an?Hab es mit getch versucht wie ihr seht...es Funktioniert aber so nicht die Schleife wird nicht unterbrochen...Kann es sein das ich die Tastenabfrage in der Funktion machen muß?Hab auch was von khbit() gehört kennt sich da jemand aus?
#include<stdio.h> #include<curses.h> char key; int i,c; void dummy(int n); int main(){ initscr(); curs_set(0); key=getch();//Tasteneingabe refresh(); while(key!='q'){//Tastenabfrage for(i=0;i<1000;i++){//Funktion wird mit schleife gestartet... dummy(i); refresh(); }} endwin(); } void dummy(int i){//Funktion int *wert; for(c=0;c<12;c++){ wert[0]=rand()%70;//Farbwert wird mit zufalls Allgo bestimmt... wert[1]=rand()%70; wert[2]=rand()%70; wert[3]=rand()%70; wert[4]=rand()%70; wert[5]=rand()%70; wert[6]=rand()%70; wert[7]=rand()%70; wert[8]=rand()%70; for(i=0;i<9;i++){ start_color(); mvprintw(wert[i],wert[c]," ",i);//Positionierung der Kästchen im Terminal wird erstellt.... init_pair(i,i,i);//farbwert wird initialisiert attron(A_BOLD); attrset(COLOR_PAIR(i)|A_BOLD); refresh(); }}}
-
hf
-
er verwendet ja schon curses...
c-neuling schrieb:
Kann es sein das ich die Tastenabfrage in der Funktion machen muß?
Du musst sie auf jeden Fall innerhalb der Schleife machen. Willst ja immer wieder abfragen ob gedrückt wurde.
Ausserdem wirst du noch die Funktion nodelay() benötigen.
-
weshalb nodelay()???ist die verzögerung so extrem???
-
ohne nodelay wartet getch bis eine Taste gedrückt wird. Hab dich so verstanden, dass du das nicht möchtest.
-
hey, kann man als Moderator editieren, ohne das dieser Editier-Text druntersteht?
naja, hast den falschen Link weggemacht
-
Wie soll die abfrage mit kbhit aussehen?so?
if(kbhit()=='q'){break;} //oder so? if(kbhit()==0){break;}
-
die abfrage soll garnicht mit kbhit aussehen, sondern mit getch() und vorherigen nodelay()
-
nodelay()erwartet 2 parameter nodelay(WINDOW *win)das ist aber umständlich extra ein fenster zu erstellen....
-
nodelay(stdscr, ..);
-
Danke dir:-)habs jetzt hinbekommen.er bricht die schleife mit q ab....
for(i=0;i<1000;i++){//Funktion wird mit schleife gestartet... key=getch(); refresh(); dummy(i); nodelay(stdscr,1); if(key=='q'){break;} refresh(); }