_getch() in Ansi C gibts da was???



  • Hi Leute

    Kennt jemand zufällig eine Funktion welche das gleiche macht wie die _getch-Metode aber in ANSI C geschrieben ist???

    Kurze beschreibung was _getch macht:

    "The _getch function reads a single character from the console without echoing. _getche reads a single character from the console and echoes the character read. Neither function can be used to read CTRL+C. When reading a function key or an arrow key, _getch and _getche must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code."

    Bitte um hilfe!

    Danke im voraus!!!



  • Sorry, aber in ANSI-C gibts keine solche Funktion. Außer dir macht es nichts aus nach deiner Eingabe noch zusätzlich die <ENTER>-Taste zu drücken, aber das bezweifle ich.



  • Nein des mit dem <ENTER> ist nicht das was ich suche.....naja trozdem danke für deine Hilfe!!!



  • Hi Leute nur zur Info es gibt eine möglichkeit!!!!

    Hier ist sie 😃

    int getch(void)
    {
      char c = 0x00;
    
      #ifdef AIX_ON_RS6000
      struct termios term, original;
    
      /* get terminal attributes */
      if(tcgetattr(fileno(stdin), &term) < 0) {
        perror("error getting terminal information");
        return -1;
      }
    
      /* save current settings */ 
      original = term;
    
      /* switch off canonical mode & set other attributes */
      term.c_lflag    &= ~ICANON;
      term.c_lflag    &= ~ECHO;
      term.c_cc[VMIN]  = 1;
      term.c_cc[VTIME] = 0;
      if(tcsetattr(fileno(stdin), TCSANOW, &term) < 0) {
        perror("error setting terminal information");
        return -1;
      }
      /* get the character */
      c=getchar();
    
      /* now set the original terminal attributes */
      if(tcsetattr(fileno(stdin), TCSANOW, &original) < 0) {
        perror("error resetting terminal information");
        return -1;
      }
     #endif
      return c;
    
    }
    
    main(){
    
    int i = 0;
    unsinged char wort[10];
    
    for (i = 0; i<10;i++){
    
    wort[i] = getch();
    }
    }
    

    😃 😃 😃

    [edit Shade]Code-Tags![/edit]



  • PSolid_ANSIC schrieb:

    Hi Leute nur zur Info es gibt eine möglichkeit!!!!

    Nein, gibt es nicht.
    Du kannst eine Non-Standard Funktion nicht mit Non-Standard Funktionen implementieren um sie Standardkonform zu machen.



  • Ähm nur damit wir uns richtig verstehen du meinst also das der Code den ich oben geschrieben habe nicht gehen würde???

    oder hab ich da was falsch verstanden???



  • Übrigens ist mir grad aufgefallen das ich gar nicht erwähnt habe das ich es für AIX und Linux brauche!!! Der obengennate Code läuft unter Windows nicht! Muss er ja auch ned in Windows gibts ja _getch() dafür!



  • Was dir Shade sagen wollte ist, dass es einen ANSI-C Standard gibt. Dieser Standard sollte auf jedem Betriebssystem funktionieren, d. h. dass es keine betriebssystem spezifische Funktionen im Standard gibt. Die Funktionen, die du in deiner nachgebauten Funktion verwendest, sind aber betriebssystemabhängige Funktionen und damit gehören sie nicht zum Standard und sind auch nicht ANSI-C.



  • Achso!!! Naja aber wie du selber sagtesch gibts keine funktion in ANSI C dafür und ich brauchte aber ein für Windows Linux und AIX Systeme und des hab ich ja jetzt! Denn ich habe eine möglichkeit für Windows und eine für AIX/Linux also schmeiße ich die beiden zusammen setzte ein paar MAkros und mach daraus eine Header-Datei!
    Hab also für mein Programmcode eine Funktion die überall läuft!!!
    Zwar nicht standard ANSI C aber es geht (es gibt ne möglichkeit dieses zu machen)!



  • Ja und das ist die Hauptsache, dass es geht. 😉

    Ich würde übrigens den Code auslagern in eine extra .c Datei, um das Ganze evtl. für weitere Programme zu nutzen, die du mal schreiben wirst.


Anmelden zum Antworten