Eingabe in der Konsole begrenzen
-
Ist es moeglich die Zeichen, die der Benutzer in der Konsole eingeben will zu begrenzen?
Also quasi in Echtzeit.mfg
Raptor
-
Ja, benutze eine Schleife mit der du solange Zeichenausliest bis die gewünschte Anzahl erreicht ist, danach ist Ende.
Dazu hätte ich ein frage. Ist es möglich während der Eingabe die Zeichen sofort in ein '*' umzuwandeln? Oder geht das nur mit der API?
Code-Hacker
-
Ich hab mal angefangen.
#include <iostream> #include <string> #include <conio.h> using namespace std; int main() { string enter[10]; { for(int len=0;len<=5 && kbhit()!=0 && getch()!='\n';++len) //max. 5 Zeichen einlesen { enter[len]=getch(); } } return 0; }
Das Problem ist, es funktioniert leider ueberhaupt nicht.
Any help?
-
@Code-Hacker: http://www.c-plusplus.net/forum/viewtopic.php?t=49050
@Raptor: Eine while-Schleife wäre viel besser geeignet. Außerdem verstehe ich nicht, wieso du ein string-Array machst.
-
@CME386: Aber wenn ich eine while-Schleife benuetzte, wuerde ich eine while- UND eine for-Schleife benoetigen. Also hab ich alles in eine for reingepackt.
Warum string array?
Warum nicht, wie gesagt, das Programm funktioniert nicht,(vielleicht deswegen)
aber evtl. kann mir ja jemand helfen.mfg
Raptor
-
Raptor schrieb:
Warum string array?
Raptor schrieb:
string enter[10];
Raptor schrieb:
Aber wenn ich eine while-Schleife benuetzte, wuerde ich eine while- UND eine for-Schleife benoetigen. Also hab ich alles in eine for reingepackt.
Das stimmt nicht.
Ich denke mal, dein Programm funktioniert nicht, weil kbhit() nicht auf einen Tastendruck wartet. Also musst du
while(!kbhit())
schreiben. Allerdings bin ich mir da auch nicht sicher, weil ich die Funktion noch nie benutzt habe.
-
@raptor
kbhit() brauchst du in dem Fall gar nicht. Es sorgt in deinem Fall sogar dafür, dass es nicht so geht, wie du es gewollt hast.Außerdem ist das getch() in der Schleifenbedingung auch falsch!
Ob man nun eine while() oder eine for(;;) Schleife verwendet ist total egal, wobei ich in dem Fall auch eine for(;;) Schleife vorziehen würde.
Diese Art von Einlesen wurde übrigens schon des öffteren nachgefragt und soviel ich weiß, steht eine Lösung in der FAQ!!
Trotzdem ein kleines Beispiel:
char text[11], z; char pwz = '*'; //Zeichen für Passwörter int i, max=10; for(i=0;i<max;) //Lese solange Zeichen ein bis 10 Zeichen gelesen wurden { z = getch(); switch(z) //wurde was spezielles gedrückt? { case 0: //Sondertasten wie z. B. Pfeil nach oben if(kbhit()) //bei Sondertasten werden zwei Werte eingelesen! getch(); //Wert der Sondertaste lesen break; case 8: //Rücktaste (Zeichen links vom Cursor löschen) if(i>0) { printf("\x8 \x8"); //Zeichen am Bildschirm löschen text[i-1] = 0; //letztes Zeichen löschen --i; } break; default: //restliche Zeichen if(z>=' ') //keine Steuerzeichen! { printf("%c", (pwz)?pwz:z); //Zeichen ausgeben; wenn pwz 0 dann eingegebenes Zeichen text[i++] = z; } break; } } text[i] = 0; //Stringendekennzeichen nicht vergessen! ;)
-
FAQ? Alleine unter getch() findet man genug Material...
MfG SideWinder
-
@side
*zustimm*