Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » kein getch unter linux

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.11.2003, 16:26 Uhr
~cmos
Gast


Hi,
für getch(); ist ja die conio.h da.
Die habe ich includiert, aber es kommt ein fehler
bei getch( );
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.11.2003, 16:31 Uhr
Pablo
Supertux
(Operator)


conio.h gibt es nur für WinDOS, und ebenfalls getch(); und das ist nicht ANSI C.

ANSI C hat getchar(); und wird in stdio.h definiert.

Es gibt in Wirklichkeit die Funktion getch() aber das gehört der Library ncurses.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.11.2003, 16:56 Uhr
0xdeadbeef
Gott
(Operator)


getch gibts auch für Linux, das ist Teil der (n)curses-Bibliothek. Das conio.h-Äquivalent wäre allerdings die termio.h, damit kann man das Terminal auch entbuffern:

C++:
#include <stdio.h>
#include <termio.h>

void setTerminalBuffering(int new_state) {
    static struct termios stored_settings;
    static int old_state = 1;
    if(!old_state == !new_state) return; //nix zu tun
    old_state = new_state;
    if(!new_state) {
        struct termios new_settings;
        tcgetattr(0,&stored_settings);
        new_settings = stored_settings;
        new_settings.c_lflag &= (~ICANON);
        new_settings.c_cc[VTIME] = 0;
        tcgetattr(0,&stored_settings);
        new_settings.c_cc[VMIN] = 1;
        tcsetattr(0,TCSANOW,&new_settings);
    } else {
        tcsetattr(0,TCSANOW,&stored_settings);
    }
}

int main() {
    setTerminalBuffering(0); //ab jetzt geht getchar() wie getch()
    printf("\n%c\n", getchar());
    setTerminalBuffering(1); //jetzt will getchar() wieder ein return haben
    return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.11.2003, 17:00 Uhr
~cmos
Gast


Danke danke,
können die sich nicht einigen mit dem ganzen kram ?

ciao...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.11.2003, 17:14 Uhr
0xdeadbeef
Gott
(Operator)


Oh, es gibt entsprechende Standards. ANSI und POSIX sind die verbreitetsten, die von so ziemlich allen Unix-Sorten und -Derivaten unterstützt werden. Die meisten unterstützen außerdem BSD, und dann gibt es noch ein paar andere. Microsoft dagegen hat von Anfang an ne ganze eigene Linie gefahren und sich nicht um irgendwelche existierenden Standards gekümmert. Teilweise auch auf ziemlich merkwürdige Art und Weise - zum Beispiel gibt es in POSIX eine Funktion itoa. Im Windows-API findet sich dagegen eine Funktion _itoa mit derselben Signatur, die dasselbe macht. Da drängt sich ein bisschen der Verdacht auf, dass Microsoft nicht source-code-kompatibel zu anderen Systemen sein will, und dagegen lässt sich wenig machen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 15.11.2003 um 17:15 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: