Forum: PC-Programmierung scanf ohne warten


von Stephan H. (stiph5)


Lesenswert?

Hey Leute,
ich mache gerade eine Uhr mit MINGW so rein als Übung. Im Prinzip 
funktioniert das Programm schon, die Überläufe klappen auch mit 
Schaltjahre usw. richtig. Um die Uhr zu stellen habe ich eine einfache 
"scanf" Funktion verwendet:
1
 scanf("%i:%i:%i %i.%i.%i" , &hour, &min, &sec, &day, &month, &year);

ich weiß das ist nicht de schöne Lösung und eine Array Analyse wäre da 
sicher schöner und funktioneller. Das mache ich Vielleicht auch nochmal 
zusätzlich.

Jetzt zu meiner eigentlichen Frage:

Mein Programm sitzt im Moment eigentlich in einer Endlosschleife fest. 
Um die zu beenden, wäre es jetzt schön ein Zeichen einlesen zu können, 
um später beispielsweise die Uhr nachstellen zu können, oder das 
Programm zu schließen.
Die Methoden, die ich kenne um ein Zeichen einzulesen, halten aber 
leider das Programm auf.Gibt es eine Funktion, die optional was 
einließt, also wenn was gedrückt wird die Variable verändert, sonst so 
lässt wie sie ist?


Danke für Eure Hilfe!
Stephan

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Manche C-Compiler bieten eine Funktion namens kbhit an (kann auch 
_kbhit heißen, je nach Compiler), die kehrt sofort zurück und liefert 
die Information, ob eine Taste gedrückt wurde (aber nicht welche, das 
ist eigens mit getc, getch o.ä. zu bestimmen).

von Klaus W. (mfgkw)


Lesenswert?

je nach Umgebung kann man auch den Filedescriptor auf "non blocking" 
setzen und auf Verdacht lesen.
Dann (aber auch vorher schon) sollte man natürlich den Rückgabewert von 
scanf() anschauen, sonst sieht man ja nicht, ob etwas gelesen wurde.

Oder mit select() o.ä. testen, ob was da ist.

Ach ja, und ggf. die Zeilenpufferung stillegen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.