001
07.04.2009, 20:06 Uhr
0xdeadbeef
Gott (Operator)
|
Zunächst mal, ja, getc(stdin) bzw. getchar() gibt ein Zeichen zurück, also musst du auf >= '1' und <= '7' prüfen. Den Wert der Ziffer erhältst du als eingabe[i] - '0'.
Was die ungebufferte Eingabe angeht, das ist vom System abhängig. Das alte DOS-API, welches auch unter Windows-Systemen verfügbar ist, hat in der conio.h eine Funktion getch():
C++: |
#include <stdio.h> #include <conio.h>
int main(void) { printf("Beliebige Taste drücken..."); fflush(stdout); getch();
return 0; }
|
Unter UNIX-Systemen (alles, was sich an POSIX hält) gibt es ein weitaus flexibleres, aber auch komplizierteres Konsolen-API. In diesem Fall willst du das Terminal in den nicht-kanonischen Eingabemodus versetzen und read jedes bisschen Daten sofort lesen lassen, also:
C++: |
#include <stdio.h> #include <termios.h> #include <unistd.h>
int main(void) { struct termius old_settings, new_settings;
/* Terminal-Einstellungen holen */ tcgetattr(STDIN_FILENO, &old_settings);
new_settings = old_setting; /* kanonischen Modus ausschalten */ new_settings.c_lflag &= ~ICANON; /* Parameter für read-Verhalten */ new_settings.c_cc[VMIN] = new_settings.c_cc[VTIME] = 0; /* neue Einstellungen setzen */ tcsetattr(STDIN_FILENO, TCSANOW, &new_settings);
/* Jetzt verhält sich getchar() wie getch() */ printf("Beliebige Taste drücken..."); fflush(stdout); getchar();
/* ursprüngliche Einstellungen zurückspielen */ tcsetattr(STDIN_FILENO, TCSANOW, &old_settings);
return 0; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |