Standardprobleme mit getch()



  • Hallo,
    ich habe immer die gleichen Probleme wenn ich für die direkte Tastatureingabe in C getch() oder getche() verwende und danach irgendwann eine Eingabe mit scanf() einbaue, dann erscheint nämlich das zuvor mit getch() eingelesene Zeichen wieder?! Warum? und wie kann man das umgehen ausser noch ein getch() einzubauen, ich hab da was gelesen von ungetch() könnte das damit funktionieren und wie setzt man ungetch() ein?

    Ein anderes Problem: wie steuert man in C einen Drucker an?
    Danke, wendy



  • Hi

    Ja. mit ungetch loescht Du das letzte Zeichen aus dem Tastaturpuffer.
    Ich habe bis jetzt aber immer die Version mit zwei getch() genommen. Eine weitere Moeglichekeit waere flush(stdin). Funktioniert aber nicht immer. Bitte specifiziere dein zweite Frage.



  • *heul*

    getch() und getche() sind nicht im Standard enthalten und fflush(stdin) erzeugt undefiniertes verhalten!

    und C kennt keinen Drucker...

    Wohin soll ich den Thread verschieben?



  • Alles klar, hab ich Verständnis für. Hierhin bitte -> DOS und Win32-Konsole 😉



  • @wendy:
    Was steht im Forenkopf des ANSI-C-Forums

    Bevor du postest lies dir mal "Wohin mit meiner Frage?" durch! Denn hier bitte nur Fragen die Standard C betreffen posten.

    Und was steht in besagtem Text "Wohin mit meiner Frage"? (ein Auszug:)

    ANSI C
    Fragen die den C-Standard betreffen. Also ohne Erweiterungen oder systemabhängige Programme. Fragen zu Grafik oder farbiger Darstellung von Texten gehören in die Console, ebenso alle Fragen im Zusammenhang mit der berühmten conio.h - dieser Header gehört nämlich nicht zu ANSI C und ist eigentlich nur von Borland voll unterstützt.



  • Aber wenn's nicht so Leute geben würde wie mich, die erst posten und dann denken, hätten die Moderatoren ja kaum was zu tun. Sowelche Beiträge wie meinen (im falschen Forum gepostet) muss und wird es immer geben. 😞



  • Naja, sowas passiert halt. Ist ja kein Beinbruch!

    Merks dir einfach für zukünftige Fragen und wir sind alle happy 🙂



  • Aber pass auf das dir das nicht noch mal passiert, denn wir haben auch noch andere Dinge zu tun als den ganzen Tag Beiträge zu verschieben. 😉



  • #include <windows.h>
    
    ...
    
    FlushConsoleInputBuffer ( GetStdHandle ( STD_INPUT_HANDLE ) );
    
    // Hier sollte das einlesen dann wieder funktionieren.
    

    MfG SideWinder



  • Danke für die Verschiebungen, tut mir leid, war ja auch schliesslich keine Absicht euch arbeit zu machen um meine in diversen falschen Bereichen geposteten Fragen wieder rauslöschen zu müssen.

    Frage1:
    Also mit windows.h wollte ich eigentlich nicht arbeiten, sondern eben nur auf der DOS Konsole und dann soll es ja auch als .c Datei noch funzen. Aber trotzdem danke. Gibt es mit diesen Einschränkungen noch Möglichkeiten dieses Problem mit getch() zu beseitigen?

    Frage2:
    Und weiss jemand wie man nen Drucker in C ansteuert, das müsste doch trotzdem gehen (würde mich stark wundern wenn c so eingeschränkt ist das man damit nur Programme 'a la geben sie eine Zahl ein' schreiben könnte, oder is das jetz neuer ANSI-Standard 😉 )?

    Frage3: ist getch() und getche() kein ANSI c?



  • 1.) windows.h und FlushConsoleInputBuffer kannst du in einer Konsolenanwendung ohne Probleme einsetzen. Das ganze ist C Code.

    2.) mit fopen LTP1 öffnen und dann mit fwrite etwas auf den Drucker schreiben. Aber am besten mit Winapi machen.

    3.) Nein, die Funktionen gehören nicht zum Standard.



  • Faszinierend !
    Danke für die Antwort, ich hab noch eine Frage dazu, auch wenn es jetz wahrscheinlich irgendwie dieselbe Frage1 ist, und zwar:

    Kann ich die windows.h dann auch in Programme einbauen die dann auf einem Linux System laufen sollen? Vielleicht habe ich das vorher falsch ausgedrückt, es soll ein Programm werden was auf überall läuft, und die Endung .c enthält, ich kenn die windows.h nur davon, wenn man versucht Sachen zu schreiben die dann auf Fensterbasis oder zumindest als Windows-Anwendung laufen (=API ?), kennt sich nebenbei jemand mit ungetch() aus, wie man die benutzt?

    Danke, falls die Fragen zu blöd sind, tuts mir leid, aber als 'Junior' hat man ja noch Narrenfreiheit... 😉



  • Nein, die windows.h kannst du selbstverständlich nicht unter Linux benutzen. 😉
    Aber die getch() Funktion gibt es unter Linux auch nicht, jedenfalls beim gcc Compiler nicht. Es ist eben nicht standardisiert. 🙂



  • Dank @ <> !
    Da ich leider kein Linux hab dachte ich, benutze ich halt mal getch() um von der Tastatur direkt einzulesen, ich wusste das nicht. Gibts da alternativen in c um direkt von der Tastatur einzulesen (hoffe ich stosse jetz damit nicht in einen anderen Bereich des Forums) die dann quasi auf DOS Ebene überall laufen und mit möglichst wenigen Problemen wie etwa Tastaturpuffer o.ä.?



  • Naja, recht viel gibts net.

    Die die in der FAQ zu finden sind + C-Standard ( alle Möglichkeiten von scan ) + direkt die WinAPI - aber das willst du ja nicht.

    Wenn du aber wirklich mit Puffer und so arbeiten willst ist sie nicht schlecht...

    MfG SideWinder


Anmelden zum Antworten