Article View: de.comp.lang.c++
Article #2037Re: alternative zu getch ?
From: Dietmar Kuehl
Date: Mon, 08 Apr 1996 14:35
Date: Mon, 08 Apr 1996 14:35
65 lines
2302 bytes
2302 bytes
Hi,
Ronald Woelfel (l045@felix.hrz.uni-giessen.de) wrote:
: Weiss jemand ne Moeglichkeit ein Zeichen in C einzuloesen
: ohne dass ein Enter erforderlich ist. Die Loesung soll
: auch unter Unix funktionieren, also getch is nicht.
Fuer diese Problem gibt es weder in C noch in C++ eine portable
Loesung. Wenn man sich auf POSIX beschraenkt (das wird von den meisten
UNIX Varianten und von den meisten C Libraries unter PC-Systemen
unterstuetzt), dann kann man es hinbekommen, indem man das Terminal
(tty) in den "non-canonical mode" schaltet:
#include <iostream.h>
#include <termios.h>
int main()
{
int line = 0;
for (int i = 0; i < 100; i++)
{
cout << i << endl;
if (line++ >= 23)
{
char dummy = 0;
cout << "press any key to continue" << endl;
struct termios term;
struct termios save;
if (tcgetattr(0, &save) < 0)
return -1;
term = save;
term.c_lflag &= ~(ECHO | ICANON);
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSAFLUSH, &term) < 0)
return -1;
cin && (cin.get(dummy));
if (tcsetattr(0, TCSAFLUSH, &save) < 0)
return -1;
line = 0;
}
}
return 0;
}
Dieser Code ist uebrigens eigentlich auch "environment specific": Er
funktioniert nur auf Platformen, die POSIX unterstuetzen. Das sind aber
recht viele.
Man sollte die Funktionen, die das tty umschalten noch in Klassen
einpacken und als "Resource" ansehen: man muss unbedingt die Resource
wieder freigeben (in diesem Fall das tty wieder in seinen
urspruenglichen Zustand bringen), da sich sonst andere Programme (z.B.
die Shell) nicht richtig verhalten.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl/
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID:
<4kb88e$ll6@news.BelWue.DE>Path:
arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehlReferences:
<4k1cmh$fnp@c4.hrz.uni-giessen.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl) Newsgroups: de.comp.lang.c++ Subject: Re: alternative zu getch ? Date: 8 Apr 1996 14:35:58 GMT Organization: Fakultät für Mathematik und Informatik Message-ID: <4kb88e$ll6@news.BelWue.DE> References: <4k1cmh$fnp@c4.hrz.uni-giessen.de> Reply-To: dietmar.kuehl@uni-konstanz.de NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de X-Newsreader: TIN [version 1.2 PL2]