rekursive funktion abbrechen mit tastendruck
-
Hallo ich habe eine rekursive funktion die ich mit tastendruck 'a' abbrechen will.
void funk(struct a *p, int a) { int ib; char cKeypressed; if(cKeypressed != 'a') { for(forschleife) { if(abfrage) { if(kbhit() == 1) { cKeypressed = getch(); } if(cKeypressed != 'a') { funk(parameter +1) } } } else { } } }
doch wenn ich jetzt eine taste drücke reagiert die funktion nicht und berechnet einfach weiter. Hat einer eine idee wieso nicht auf den tastendruck reagiert wird?
mfg
-
char cKeypressed; if(cKeypressed != 'a')
Diese if-Abfrage wird immer true ergeben, da du char nicht initalisierts.
Wo soll da ein 'a' herkommen?
-
mit
[code]
if(kbhit() == 1)
{
cKeypressed = getch();
}
if(cKeypressed != 'a')
{
funk(parameter +1)
}
[\code]frag ich ab ob taste gedrückt wird und ob a gedrückt wird
-
char cKeypressed; if(cKeypressed != 'a')
was glaubst du, was bei dem if in cKeypressed drin steht?
-
Anfangs irgendwas. aber sobald ich das a auf der tastatur drücke wird es ja mit getch()cKeypressed übergeben oder liege ich falsch? Dann is ja die abbruchbedingung erfüllt.
-
Hat jemand einen Lösungsvorschlag, wie man den Funktionsabbruch über tasten noch lösen kann?
-
Hi !
Man kann es mit Tastendruck machen, wenn du die Variable dafür global machst:int iKeypressed = 0; int iTestcounter = 0; void funk() { iTestcounter++; printf( "entered: %d\r" ,iTestcounter ); if( iKeypressed != 'a') { for(;;) { if(kbhit() == 1) { iKeypressed = getch(); } if( iKeypressed == 'a' ) break; funk(); } } } int main ( int argc, char* argv[] ) { funk(); return 0; }
Oder wenn du schnell genug das 'a' drücken kannst, noch bevor funk() in der for-Schleife aufgerufen wird. Ansonsten bekommt die nächste funk() Funktion einen eigenen Stack und die Lokale Variable xKeypressed 'merkt' nichts davon
-
ok das erklärt wieso der tastendruck nicht bemerkt wird. Danke hat schonmal sehr geholfen. globale Variablen eher nicht. kann man das vielleicht auch mit rückgabewert oder parameter der funktion selber regeln?
-
kannst du das nicht ohne rekursion lösen ?
-
Du könntest der Funktion einen Rückgabewert geben und diesen dann abfragen:
int funk() { for(;;) { if(kbhit() == 1) { if(getch() == 'a') return 0; } if(!funk()) return 0; } return 1; }
-
Hab es nun so gelöst, das die Funktion immer den char zurück gibt. nun wird nach jedem rekursionsschritt geprüft ob die taste gedrückt wurde. Funktioniert wunderbar.