unsichtbare Eingabeaufforderung
-
mann könnte versuchen ein backspace auf die ausgabe zu schicken ( ich glaub \b).
Es ist natürlich shell-abhängig was dann passiert.
Entweder das letzte zeichen auf der ausgabe wird gelöscht oder es erscheint nur ein eigenartiges symbol hinter dem text oder es wird ignoriert.
gleiches gilt für den Fall dass du die gesammte aktuelle zeile neu schreiben willst mit \r.Ne andere Ansi C konforme (also ohne OS abhängige Funktionen zu nutzen) sehe ich nicht.
-
Hab nur mal irgendwo gelesen, dass es mit getch() oder so ähnlich geht...
-
Ich habs wieder gefunden:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char Eingabe; printf("scanf() Eingabeaufforderung:\n"); scanf("%c",&Eingabe); getchar(); printf("Deine Eingabe wurde auf dem Bildschirm ausgegeben und \ndu musstest Enter druecken. Deine Eingabe war: %c\n\n",Eingabe); printf("getch() Eingabeaufforderung:\n"); Eingabe=getch(); printf("Deine Eingabe wurde nicht auf dem Bildschirm ausgegeben und \ndu musstest nicht Enter druecken. Deine Eingabe war: %c\n\n",Eingabe); system("PAUSE"); return 0; }
auf http://www.c-programmieren.com/C-Lernen.html
Hab es ausprobiert, es hat aber nicht funktioniert
-
08mmarte schrieb:
Hab es ausprobiert, es hat aber nicht funktioniert
Wie immer, die selbe alte Leier: "Funktioniert nicht ist keine ausreichende Fehlerbeschreibung". Fehlermeldung des Compilers?
-
1>c:\dokumente und einstellungen\mamar\eigene dateien\visual studio 2005\projects\unsichtbar\unsichtbar\unsichtbar.cpp(17) : error C3861: "getch": Bezeichner wurde nicht gefunden.
-
Ich glaube ich habe den Fehler gefunden
Eingabe=getch();
müsste eigentlich
Eingabe=getchar();
sein...
-
08mmarte schrieb:
1>c:\dokumente und einstellungen\mamar\eigene dateien\visual studio 2005\projects\unsichtbar\unsichtbar\unsichtbar.cpp(17) : error C3861: "getch": Bezeichner wurde nicht gefunden.
Da musst du in der Hilfe (z.B. MSDN) nachsehen, welchen Header du für diese Funktion einbinden musst!
Btw, ANSI-C, nicht Ansic...
-
scanf() Eingabeaufforderung: 1 Deine Eingabe wurde auf dem Bildschirm ausgegeben und du musstest Enter druecken. Deine Eingabe war: 1 getch() Eingabeaufforderung: 1 Deine Eingabe wurde nicht auf dem Bildschirm ausgegeben und du musstest nicht Enter druecken. Deine Eingabe war: 1 Drücken Sie eine beliebige Taste . . .
Das gibt es aus, in Zeile 6 - 8 ist der Fehler, Hier steht "Deine Eingabe wurde nicht auf dem Bildschirm ausgegeben und du musstest nicht Enter druecken." was nicht stimmt, denn ich musste Enter drücken...
-
Wenn du nicht Enter drücken willst, kannst du z.B. _kbhit() in Verbindung mit getch() benutzen. Kleines Beispiel:
int main() { printf("Eingabe: "); while(!_kbhit()); char c=getch(); printf("\b"); printf("\nEingegebenes Zeichen: %c",c); getchar(); }
Standarfkonformes ANSI-C ist das nicht, aber wen kümmert's... (nicht schlagen, bitte
)
-
Bevor es passiert, hier schon mal der Tipp: für das Beispiel conio.h einbinden!
-
Danke _matze hast mir mal wieder geholfen...
-
Kann man so auch Sätze oder einzelne Wörter einlesen??
-
#include "stdafx.h" #include "conio.h" int main() { while(!_kbhit()); char a=getch(); printf("\b"); while(!_kbhit()); char b=getch(); printf("\b"); while(!_kbhit()); char c=getch(); printf("\b"); while(!_kbhit()); char d=getch(); printf("\b"); while(!_kbhit()); char e=getch(); printf("\b"); printf("\nSie haben: [%c%c%c%c%c] eingegeben",a, b, c, d, e); getchar(); }
Funktioniert mit Wörtern...
Ist seh aufwändig muss sicher einfacher gehen, oder?
-
Soll das auf eine Passworteingabe hinauslaufen?
Mach lieber eine Endlosschleife, in der du solange einzelne Zeichen einliest (und die Anzeige mit '\b' löschst), bis ein bestimmtes Ende-Zeichen (z.B. ESC) eingegeben wurde. So beschränkst du dich nicht auf eine bestimmte Anzahl von Zeichen.
-
Nein, das läuft nicht auf ein Passwort hinaus...
Das mit der Schleife werde ich sofort ausprobieren...
-
Ein Beispiel:
int main() { char c; std::string s; printf("Eingabe: "); for(;;) { if(_kbhit()) { c=getch(); if(c==27 || c==13) { //Abbruch mit ESC oder RETURN break; }else { s+=c; } printf("\b"); } } printf("\nEingegebene Zeichenkette: %s",s.c_str()); getchar(); }
Wupps! Das ist ja das C-Forum, also nimm kein std::string!
-
08mmarte schrieb:
1>c:\dokumente und einstellungen\mamar\eigene dateien\visual studio 2005\projects\unsichtbar\unsichtbar\unsichtbar.cpp(17) : error C3861: "getch": Bezeichner wurde nicht gefunden.
Und C Code tut man in einer .c Datei rein und nich in .cpp. Du solltest C Code nicht mit einem C++ Compiler jagen.
-
_matze schrieb:
Btw, ANSI-C, nicht Ansic...
Stimmt! Und vor allem ist die Funktion getch() nicht in ANSI-C bekannt.
-
08mmarte schrieb:
Hab nur mal irgendwo gelesen, dass es mit getch() oder so ähnlich geht...
Es gibt kein getch in ANSI C! Das ist eine Betriebssystem/Compiler spezifische Sache.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.