scanf silent einlesen?
-
Hallo,
ist es möglich eine Zahl von der Tastatur einzulesen, ohne dass das was ich tippe im CMD Fenster dargestellt wird?
Im folgenden Beispiel lese ich eine Zahl ein (das soll nicht dargestellt werden), und nach Enter soll dann die Zahl um 1 inkrementiert im cmd erscheinen.
Geht das überhaupt?#include <stdio.h> int main() { unsigned int zahl; scanf("%d", &zahl); zahl+=1; printf("%d, zahl); return 0; }
-
Vielleicht sowas in der Richtung?
int main() { char input[1024]={0}; char *pInput=input; char c; do { c=getch(); *pInput++=c; printf("\b"); }while(c!=13); printf(input); getchar(); }
Ich könnte mir aber vorstellen, dass das auf sehr langsamen Rechnern flackert, so dass man doch kurz die Eingabe sieht...
EDIT: Hier kannst du natürlich erstmal alles eingeben. Nur Zahl und inkrementieren musst du noch einbauen.
EDIT2: Und bevor du inkrementieren kannst, musst du natürlich den String nach int konvertieren (atoi oder strtol).
-
Oke danke.
Hatte gehofft es gibt irgendeinen Befehl der einfach die Ausgabe der Tastaturanschläge unterdrückt.So wird mein Vorhaben wohl etwas komplizierter. Aber machbar
-
Kody schrieb:
So wird mein Vorhaben wohl etwas komplizierter.
So kompliziert ist's gar nicht:
int main() { char input[1024]={0}; char *pInput=input; int pw; char c; do { c=getch(); if(c>=48 && c<=57) { //nur Zahlen zulassen *pInput++=c; } printf("\b"); }while(c!=13); pw=atoi(input); //nach int konvertieren printf("%d",++pw); getchar(); }
-
ANSI-C kennt aber kein getch()
-
Tachyon schrieb:
ANSI-C kennt aber kein getch()
Ok. Gegenvorschlag?
-
_matze schrieb:
Ok. Gegenvorschlag?
Wenn man auf ANSI-C beharren will: Geht nicht.
Wenn man weiss, dass es eh nicht richtig portabel geht:
getpass
unter Linux. Header:unistd.h
Unter Windows ist es etwas komplizierter:
#include <stdio.h> #include <windows.h> void getPwd(char * pwd, size_t length) { HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); //handle fuer Standardinput DWORD mode = 0; GetConsoleMode(hStdin, &mode);//aktuellen Mods auslesen SetConsoleMode(hStdin, mode & ~(ENABLE_ECHO_INPUT)); //Echo fuer Eingaben ausschalten fgets (pwd, length, stdin); //sollte nichts mehr ausgeben SetConsoleMode(hStdin, mode | (ENABLE_ECHO_INPUT)); //Ausgabe wieder einschalten } int main() { char pwd[20]; getPwd(pwd, 20); puts(pwd); }
-
Nett. Man lernt doch immer wieder was dazu!