K&R, 2.Aufl Funktionen getch() und ungetch()?

27/01/2009 - 06:32 von Ottmar Ohlemacher | Report spam
Hallo,

K&R 2.Aufl. verwenden auf Seite 94 die Funktionen getch() und ungetch(),
jedoch ohne anzugeben, welche Datei man includieren muß, damit die
Funktionen auch verwendet werden können.

Können die Funktionen überhaupt unter dem gcc verwedent werden? Ich hab da
unter googel etwas gelesen, dass getch() nur von MS-Dos angeboten wurde,
diese Funktionen aber nicht in Unix vorhanden wàren...

...auch der versuch, eine Datei namens conio.h zu inkludieren schlug
mangels Existenz fehl! :-(.

Ist dieses getch() und ungetch() überhaupt unter Unix bzw Linux bzw gcc
überhaupt vorhanden, und was sind das überhaupt für Beispiele, mit denen
man da konfronitert wird, die man aufgrund der Verwendung nichtvorhandener
Funktionen, nichtvorhandener main()-Funktion kaum oder wirklich nur
beschwerlich nachvollziehen kann, als ob nicht das Thema selbst schon
abstrakt genug wàre ... :-(, muß man sich auch noch mit Funktionen
herumschlagen, die entweder gar nicht da sind, oder die noch gar nicht
besprochen wurden... (na gut, aus dem Kontext kann man dann schon
verstehen, was isdigit(char) und isspace(char) machen sollen, daß aber die
Funktionen getch() und ungetch() nicht existent sind, und dazu noch nicht
einmal eine mainfunktion vorhanden ist, um das Beispiel nachzuvollziehen,
das ist wirklich das Letzte :-(, und das bei einem Buch, was immer als das
Nonplusultra hochgelobt wird.

mfG Ottmar


Ungefàhr so müsste wohl das Programm aussehen, wenn getch() und ungetch()
funktionieren würden...

#include<stdio.h>
#include<ctype.h>
//#include<conio.h>
//int getch(void);
//void ungetch(int);
/* getint: naechsten ganzzahligen Wert aus der Eigabe holen
und in *pn ablegen */
int getint(int *pn)
{
int c, sign;
while (isspace(c = getch())) /*Zwischenraum ignorieren*/
;
if (!isdigit(c) && c != EOF && c != '+' && c !='-') {
ungetch(c); /* es ist keine Zahl */
return 0;
}
sign = (c == '-') ? -1 : 1;
if (c == '+' || c == '-')
c = getch();
for (*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
*pn *=sign;
if (c != EOF)
ungetch(c);
return c;
}
int main(void){
int a, *zeig;
printf("Gib eine Ganzzahl ein!");
zeig = &a; // Adresse Variable an Zeiger
getint(zeig); // Eingaberoutine aufrufen
printf("Du hast %d eingegeben",a);
return 0;
}
 

Lesen sie die antworten

#1 Erich Fruehstueck
27/01/2009 - 06:57 | Warnen spam
Am Tue, 27 Jan 2009 06:32:19 +0100 schrieb Ottmar Ohlemacher:

K&R 2.Aufl. verwenden auf Seite 94 die Funktionen getch() und ungetch(),
jedoch ohne anzugeben, welche Datei man includieren muß, damit die
Funktionen auch verwendet werden können.



Diese Funktionen werden im Buch Seite 77 definiert. Die Seitennummer làßt
sich einfach aus dem Sachverzeichnis am Ende des Buches bestimmen;)

Können die Funktionen überhaupt unter dem gcc verwedent werden? Ich hab
da unter googel etwas gelesen, dass getch() nur von MS-Dos angeboten
wurde, diese Funktionen aber nicht in Unix vorhanden wàren...



Getch wird auch unter UNIX verwendet, die Funktion ist Teil der
curses-Bibliothek.

...auch der versuch, eine Datei namens conio.h zu inkludieren schlug
mangels Existenz fehl! :-(.



Mit <curses.h> hàttest du ein getch verfügbar, aber das ist, so wie
getch aus conio.h, nicht kompatibel mit der im Buch definierten Funktion.
Da getch vom Standard nicht reserviert ist, steht es der Anwendung
frei, den Namen zu verwenden.

Grüße Erich

EFEU 3.2 is released!
Get the open source from http://efeu.cybertec.at.

Ähnliche fragen