ungepufferte Tastaturausgabe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ungepufferte Tastaturausgabe

    Guten Abend.

    Ich habe von meiner Schule ein C Script bekommen welches ich gerade durcharbeite. Leider wurde dieses auf Basis von Windows mit Borland Builder
    geschrieben und ich hänge gerader an einer Aufgabe und weiß nicht wie ich es abändern kann damit es funktioniert.
    Hier erstmal der Code:

    C-Quellcode

    1. #include <iostream>
    2. #include <stdio.h>
    3. #include <curses.h>
    4. int main (int argc, const char * argv[])
    5. {
    6. char CodeByte;
    7. printf("Bitte betaetigen Sie die Funktionstaste F7 !\n\n"); CodeByte = getch();
    8. printf("1. Tastencode-Byte: %2d\n",CodeByte);
    9. CodeByte = getch();
    10. printf("2. Tastencode-Byte: %2d\n",CodeByte);
    11. getch();
    12. return 0;
    13. }
    Alles anzeigen



    Ursprünglich wurde noch eine conio.h inkludiert welche ich ausgetauscht habe.
    Es funktioniert aber nicht so wie es soll. Wer kann helfen?
  • Das Problem bei deinem Code ist, dass die Entereingabe bei dir nicht abgefangen wird.
    Um dies zu lösen legst du dir zuerst eine weitere Char Variable an (die kannst du dann 'enter' nennen).

    Dann ersetzt du die getch() Anweisung durch scanf, da scanf mehr als nur eine Eingabe abfangen kann.
    Das sieht dann so aus:

    scanf("%c%c", &CodeByte, &enter);

    Wichtig ist das '&' dabei, da es sonst nicht funktionieren würde.
    Hier noch eine genauere Erklärung dazu:

    c-howto.de/tutorial-benutzerin…ion-tastatureingaben.html

    Dort wird auch nochmal explizit auf das Enter im Puffer eingegangen.

    Hoffe das konnte dir helfen...
  • Ok vielleicht hab ich mich falsch Ausgedrückt. Und zwar soll das Programm folgendes können:
    Bei einer Tastatureingabe werden ja 2-Codebytes im Tastaturpuffer. Der erste ist der ASCII-Code
    und der zweite der Scancode(Tastenidentifikationscode, und um den geht es eigentlich).
    Bei einer "ASCII-Tastenbestätigung" holt ja das getch() das erste Byte ab und lässt das zweite
    halt weg.


    Hoffe es ist verständlich, bitte fragt mich nicht nach den tieferen Sinn. Es ist halt nur total
    bescheiden das der Dozent sich auf Borland eingeschossen hat. Doch ich sehe es nicht ein
    auf Windows zu wechseln.
  • Unter DOS. Wie ich schon geschrieben hatte. Window7 unterstuetzt nur immernoch manche DOS Dinge, darum geht es auch unter Windows7.

    Mac hatte nie DOS support. Installier Dir einen DOS Emulator, oder loese es anders. ncurses in der UNIX Welt sollte mit Dingen wie F7 in einer Konsolenanwendung klarkommen. Das laeuft aber gaenzlich anders, da hier die Terminal-Anwendung (wie Terminal.app) spezielle Codes (ASCII-Zeichen-Kombinationen) im Falle von etwa F7 an den Prozess weiterreicht.

    Wenn Du direkt auf die Tastatur zugreifen willst, musst Du es wiederum ganz anders machen und brauchst eventuell sogar Objective-C.
    C++
  • Naja, die Wiki ist da eindeutig:
    conio.h is a C header file used in old MS-DOS compilers to create text user interfaces. It is not described in The C Programming Language book, and it is not part of the C standard library, ISO C nor is it defined by POSIX.
    This header declares several useful library functions for performing "console input and output" from a program. Most C compilers that target DOS, Windows 3.x, Phar Lap, DOSX, OS/2, or Win32[1] have this header and supply the associated library functions in the default C library. Most C compilers that target UNIX and Linux do not have this header and do not supply the library functions. Some embedded systems are using a conio-compatible library.[2]


    Das zweite Byte abzurufen dürfte kein Problem sein, showkey unter Linux kann das soweit ich weiß im Scandump-Modus.
    Ob (und wenn ja welche) plain-C unter Unix dafür allerdings Möglichkeiten zur Verfügung stellt weiß ich nicht. Zerm? ^^
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P