Supportnet / Forum / Anwendungen(Java,C++...)
Schleife in C soll solange wiederholt werden bis Taste gedrückt wird? Wie geht das?
Frage
Ich brauche für eine Projektarbeit für die Schule ein Programmteil, dass solange abläuft bis irgendeine Taste gedrückt wird. Geht das in C mit irgendeier Funktion?
Ralf
Antwort 1 von semi
Meinst Du ein bestimmtes Zeichen oder soll es rattern, bis man auf irgendeine Taste drückt?
Das zweite ist keine gute Idee und geht vermutlich nur mit Assembler.
(Int. 16h, Fkt. 1 - Tastaturpuffer checken)
Das zweite ist keine gute Idee und geht vermutlich nur mit Assembler.
(Int. 16h, Fkt. 1 - Tastaturpuffer checken)
Antwort 2 von ralfabeta
Genau. Rattern bis irgendeine Taste gedrückt wird. Kommt mir so simpel vor - geht es wirklich nicht so einfach. Es klingt doch wie ein Problem, das alle Nase lang vorkommt.
Antwort 3 von semi
Eine Schleife "endlos" ohne Pausen laufen zu lassen, ist ohne preemptives Multitasking ziemlich kritisch.
So ein Programm würde alles andere blokieren.
Wenn Du es in C machen willst, dann über Keyboard-Hook (siehe KeyboardProc, SetWindowsHookEx usw.)
Zweite Möglichkeit. Eine Endlos-Schleife in einem neuen Thread.
Im Hauptthread auch Eingabe warten und bei der Eingabe eines Zeichens das Thread killen. Absoluter Schwachsinn.
Wozu brauchst Du sowas?
So ein Programm würde alles andere blokieren.
while:
mov ah, 1
int 16h ; Tastaturpuffer prüfen
jz end_while ; Zeichen im Puffer (Z=1)?
; Schleifeninnere
jmp while
end_while:
Wenn Du es in C machen willst, dann über Keyboard-Hook (siehe KeyboardProc, SetWindowsHookEx usw.)
Zweite Möglichkeit. Eine Endlos-Schleife in einem neuen Thread.
Im Hauptthread auch Eingabe warten und bei der Eingabe eines Zeichens das Thread killen. Absoluter Schwachsinn.
Wozu brauchst Du sowas?
Antwort 4 von semi
Ehhh... ich kaufe ein 'c' wie character.
blockieren statt blokieren :-)
blockieren statt blokieren :-)
Antwort 5 von ralfabeta
Ich glaube, es geht noch einfacher. Mit der Funktion kbhit(). Habe ich gereade in einer C-Doku gefunden. Ist allerdings keine ANSI C, glaube ich!
ralfabeta
ralfabeta

