Schleifenproblem
-
Hallo,
ich habe mit folgendem Code Probleme:
void ACGSelect() { //First check if the reader is open if(!reader_handle) cout<<"\nÖffnen Sie erst ein Lesegerät!\n"; else { char chip_uid[16]; long select_err=0,select_succ=0; while(!getch()) { RDR_SendCommandGetData(reader_handle,"select","",chip_uid); if(strlen(chip_uid) <= 2) select_err++; else select_succ++; cout<<select_err<<" "<<select_succ<<" "<<chip_uid<<endl; } } }
Mein Hauptproblem: Mit der Schleife möchte ich erreichen, dass die im Block stehenden Anweisungen ausgeführt werden, bis ich eine Taste eingebe. Merkwürdigerweise funktioniert es umgekehrt, wenn ich die Negation weglassen, dass die Blockanweisung ausgeführt wenn ich eine Taste drücke, aber halt nicht umgekehrt.
Versuchshalber hatte ich das ganze mit einer For-Schleife konstruiert, etwa so:
for(int i=1;i<50;i++) { RDR_SendCommandGetData(reader_handle,"select","",chip_uid); if(strlen(chip_uid) <= 2) select_err++; else select_succ++; cout<<select_err<<" "<<select_succ<<" "<<chip_uid<<endl; }
Verückterweise (zumindest für mich ;)) wurden dann in Abhängigkeit der if-Bedingung deutlich mehr durchläufe ausgeführt, als in der Schleife angegeben, d. h. select_err und select_succ hatten in der Summe mehr als die 50 Schleifendurchläufe.
Ich bitte es nachzusehen, dass ich Char Arrays anstatt Strings verwende, aber die RDR_SendCommandGetData Funktion ist nicht von mir und akzeptiert nur char Variablen, soweit ich es ausprobiert habe. Umwandeln der variablen hat zunächst keine Priorität für mich, aber falls jemand einen Tipp für mich hat ...
-
getch() wartet auf einen Tastendruck und liefert den zugehörigen ASCII-Code zurück - was du an der Stelle benötigst, ist kbhit() (da gibt es afaik keine Standard-Funktione dafür).
-
Vielen Dank. Jetzt funktioniert es wie gewünscht, muss gestehen, dass ich kbhit() in der Konsolen FAQ kurz gesehen hatte, aber es nicht als die richtige Lösung wahrgenommen habe
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.