Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Input ohne return

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 < [ 2 ]
000
03.03.2003, 17:28 Uhr
MarcDuerner



Hi,
Wie kriegt man es denn mit C++ auf der Console hin dass eine Eingabe gefordert
wird aber man nicht return drücken muss? wenn ich cin << , cin.get() oder
cin.getline() nehme muss man immer return drücken.

Marc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.03.2003, 07:05 Uhr
virtual
Sexiest Bit alive
(Operator)


Betriebssystemabhängig. Ich glaube, Du arbeitest unter Windows.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.03.2003, 08:05 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


unter windows:

mit _getch() kriegste immer das eingegebene zeichen, ob man enter nun drückt oder nicht
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.03.2003, 14:50 Uhr
MarcDuerner



Ich arbeite nur unter Linux und das Programm muss nicht portabel sein. Wie gehts denn unter Linux?

Marc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.03.2003, 19:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da müsste es auch glaub ich

getch oder sowas geben ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.03.2003, 20:58 Uhr
virtual
Sexiest Bit alive
(Operator)


Unter Öinux mit getch aus der ncurses Lib. man getch.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.03.2003, 09:47 Uhr
~0xdeadbeef
Gast



C++:
#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("%c\n", getchar());
}


getchar() holt ein Zeichen aus stdin. Das ist ANSI-C und in POSIX.1, also sogar portabel. Für genaueres siehe "man getchar".
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.03.2003, 10:03 Uhr
~0xdeadbeef
Gast


Hoppla, ich seh gerade, dass getchar() noch auf ein newline wartet. Verdammt. Na gut, dann halt doch ncurses:

C++:
#include <ncurses.h>

int main() {
  initscr(); / *Ncurses initialisieren. Macht den Screen leer, hält sich aber den alten screen im Hintergrund vor */
  printf("%c\n", getch()); /* Ein Zeichen einlesen und ausgeben */
  getch(); /* Auf noch ein Zeichen warten, damit du den Effekt siehst. */
  endwin(); /* ncurses deinitialisieren. Holt den alten Screen wieder nach vorne */
  return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.03.2003, 10:30 Uhr
~0xdeadbeef
Gast


Allerdings ist ncurses ein bisschen overkill. Wie wärs hiermit:

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

void setTerminalBuffering(bool new_state) {
    static struct termios stored_settings;
    static bool old_state = true;
    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(false); //ab jetzt geht getchar() wie getch(), nur ohne ncurses
    printf("\n%c\n", getchar());
    setTerminalBuffering(true); //jetzt will getchar() wieder ein return haben
    return 0;
}


Ich hab den Code hier: www.c-for-dummies.com/lessons/linux/04/ gesehen und ein bisschen abgewandelt, so dass er in eine Funktion passte. Die Funktion ist in der Form C++, weil bool in C nicht definiert ist. Für C müsste man vor der Funktion void setTerminalBuffering(bool) noch diese Zeile einfügen:

C++:
typedef enum{false, true} bool;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.03.2003, 12:27 Uhr
MarcDuerner



Hi,
Welche ncurses documentation würdest du denn empfehlen?

Marc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ GNU/Linux ]  


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: