getch()
-
Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI 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.
-
keksekekse schrieb:
getch() und gets(), scanf(), fread() passen einfach nicht zusammen. hab mich grade drüber ärgern müssen, daß die gedrückte taste von getch als erste im buffer von gets erscheint und was ich auch anstelle, fflush(stdin) und so nix hilft wirklich ich glaub ich mach in zukunft nur noch gui-programme
hä? was meinst die passen nicht zusammen und was was meinst du mit dem markiertem satz ?
bin ich zulange wach oder ist es falsch geschrieben ?
wie schon gesagt worden ist
c.rackwitz schrieb:
kbhit
ist das deine funktion
-
Stelfer schrieb:
was meinst die passen nicht zusammen
#include <conio.h> #include <stdio.h> int main() { char ch, s[80]; ch = (char)getch(); printf("getch <%c>\n", ch); gets(s); printf("gets <%s>\n", s); getch(); return 0; }
-
ich verstehe nicht die problematik, die funktionen machen doch ihren zweck....
wenn ich bei getch o eingebe und bei dem gets hallo dann krieg ich folgendes raus:
getch <o> hallo gets <hallo>
was stimmt nun nicht ?
-
Stelfer schrieb:
ich verstehe nicht die problematik, die funktionen machen doch ihren zweck....
wenn ich bei getch o eingebe und bei dem gets hallo dann krieg ich folgendes raus:
getch <o> hallo gets <hallo>
was stimmt nun nicht ?
Dass man nicht gets() sondern fgets() verwenden sollte, weil gets() die Speichergröße des Zielarrays nicht beachtet.
Ansonsten sehe ich auch kein Problem darin. Ich kann mir nur noch vorstellen, dass die conio-Library von keksekekse nicht so funktioniert wie normalerweise erwartet.
@keksekekse
Welchen Compiler nutzt du?fflush(stdin) ist übrigens auch nicht zu empfehlen => undefiniertes Verhalten
-
ja gut aber das war ja nicht die frage ob man gets oder fgets benutzen sollte, denoch verstehe ich nicht seine frage -.-
-
AJ schrieb:
Stelfer schrieb:
wenn ich bei getch o eingebe und bei dem gets hallo dann krieg ich folgendes raus:
getch <o> hallo gets <hallo>
Ansonsten sehe ich auch kein Problem darin. Ich kann mir nur noch vorstellen, dass die conio-Library von keksekekse nicht so funktioniert wie normalerweise erwartet.
@keksekekse
Welchen Compiler nutzt du?Ich hab mal so durchgetestet:
Platz 1: Alles richtig borland c 2.01 für DOS ---------------------- getch <o> hallo gets <hallo> Platz 2: Das Mittelfeld watcom codeblocks MinGW Developer Studio Borland CBuilder6 Borland C++5.5 MS VC++6.0 -------------- getch <o> ohallo gets <ohallo> Abgeschlagen auf Platz 3: getch() wartet auf <RETURN> devc++ ------ ohallo getch <o> gets <hallo>
-
Stelfer schrieb:
#include <conio.h> #include <stdio.h> int main() { char ch, s[80]; ch = (char)getch(); printf("getch <%c>\n", ch); gets(s); printf("gets <%s>\n", s); getch(); return 0; }
getch <o> ohallo // kann doch garnet sein oO ? wegen '\n' eine zeile davor gets <ohallo> // hm normal gibts keinen puffer beim getch
ohallo // wie soll das gehen ? // bzw welcher kompiler getch <o> gets <hallo>
-
getch <o> ohallo gets <ohallo>
According to the f.m. ist das ganz normal:
Borland/TurboC++ Help schrieb:
getch liest ein einzelnes Zeichen direkt von der Tastatur, ohne es auf dem Bildschirm auszugeben.
getche liest ein einzelnes Zeichen von der Tastatur und gibt es auf dem Bildschirm aus, wobei direkt in den Bildschirmspeicher geschrieben wird oder BIOS-Routinen verwendet werden.
-
Stelfer schrieb:
getch <o> ohallo // kann doch garnet sein oO ? wegen '\n' eine zeile davor gets <ohallo> // hm normal gibts keinen puffer beim getch
getch() liest direkt von der Tastatur - aber in dem Fall wird das von getch() abgefangene Zeichen trotzdem in den normalen Tastaturpuffer (für gets()/scanf()/...) weitergeleitet, so daß du es doppelt erhältst.
ohallo // wie soll das gehen ? getch <o> gets <hallo>
wie kekse schrieb - da wird getch() einfach auf das Standard-getc() gemappt (und das bekommt seine Daten erst, nachdem der Eingabepuffer geflusht wurde - also beim ENTER).