Bei 'cin' ein Default Wert vorschlagen
-
jetzt verstehe ich sie. da steht: wenn der benutzer nix eingegeben hat, wird der default-wert genommen.
dein programm macht also sowas
int main() { int ergebnis=44100; cout<<"Bitrate fuer die Aufnahme [44100]: "; cin>>ergebnis; std::cout << "Sie waehlten:" << ergebnis << '\n'; }oder sowas
int main() { string name; cout<<"Name fuer die Aufnahme [Hans]: "; cin>>name; if(name=="") name="Hans"; std::cout << "Sie waehlten:" << name << '\n'; }mhmm.ich weiß ja nicht, ob ich mich mit dem vielen code so anfreunden kann.
wäre sicherlich anders, wenn ich noch einen mindes- und maximalwert angeben könnte und eine eingabeaufforderung meiner wahl und einen zünftigen benutzerbeschimpfungestext, der kommt, wenn der benutzer nicht im erlaubten bereich war.
-
bwbg schrieb:
...

Zwar toll gemacht, aber Sinn ..._matze schrieb:
Ganz übel dahingeschludert:

int main(){}Stimmt, denn es ist ein Fehler in deinem Code. Drückt man einen Buchstaben oder eine Zahl, wird diese/r "geschrieben" und man kann ihn/sie nicht mehr löschen.
volkard schrieb:
...
Ich muss mich volkard anschließen. Für diese kleine Funktionalität, ist es echt ein wenig unnötig und vorallem, ein riesen Umweg.
-
FreakY<3Cpp schrieb:
Stimmt, denn es ist ein Fehler in deinem Code. Drückt man einen Buchstaben oder eine Zahl, wird diese/r "geschrieben" und man kann ihn/sie nicht mehr löschen.
Ja, und nicht nur das: der schlimme Fehler ist ja einfach, dass das erste eingegebene Zeichen nicht zum verarbeiteten Input gehört. Bei Eingabe 23 kommt also 3 an... Es war ja noch so früh...

Wenigstens habe ich als einziger versucht, die ursprüngliche Intention zu verfolgen (so wie ich sie verstanden habe), nämlich den Default-Wert zu drucken und bei eventueller Eingabe zu löschen, um die Eingabe dort zu platzieren. Na ja, muss man auch nicht haben...

-
_matze schrieb:
int main(){ int defaultLength=50; int length_t; cout << "Max. Länge des Tunnels (in Meter): " << defaultLength; char c=getch(); if(c==13) { length_t=defaultLength; }else { cout << "\b\b" << " " << "\b\b" << c; cin >> length_t; } cout << "\nLänge: " << length_t; getchar(); }War ja schon eig. ein guter Ansatz. Mach noch aus der Zeile
cout << "\b\b" << " " << "\b\b" << c;folgenedes:
cout << "\b\b" << " " << "\b\b";Dann wirkt das Programm schonmal besser. Aber ganz so wie du dir das vorstellst Peter01, wird das glaube ich nicht gehen. Höchstens wenn du nur mit getch() arbeitest. Ich würde mir das so vorstellen, dass du den Text schreibst, wird BACKSPACE gedrückt, gehst du an die Konsolenkoordinaten-XY, wird eine Tastegedrückt, schreibst du sie usw. Ob sich der Aufwand lohnt, ist die andere Frage.
-
[quote="FreakY<3Cpp"]
cout << "\b\b" << " " << "\b\b";Ja, nur dass man dann das erste Zeichen immer zwei mal eingeben muss. Die sinnvollste Lösung wäre wohl zeichenweise mit getch einlesen, String zusammenbasteln und dann konvertieren.
Allerdings...
FreakY<3Cpp schrieb:
Ob sich der Aufwand lohnt, ist die andere Frage.
Das ist der Punkt.
-
std::istream hat das geniale putback, womit es so aussähe:
... char c=getch(); if(c==13) { length_t=defaultLength; }else { cin.putback( c ); // <- cin >> length_t; } ...(Abgesehen davon, dass diese Lösung sowieso nicht mehr erwünscht ist
Wollte nur mal auf "putback" hinweisen :))
-
Oh, putback ist cool, kannte ich noch nicht.
Gut, dann hier die hässliche, viel zu aufwendige und nicht mehr erwünschte Lösung:

int main(){ int defaultLength=50; int length_t; char sDefault[64]; sprintf(sDefault,"%d",defaultLength); cout << "Max. Länge des Tunnels (in Meter): " << defaultLength; char c=getch(); if(c==13) { length_t=defaultLength; }else { for(int i=0;i<strlen(sDefault);i++) cout << "\b"; for(int i=0;i<strlen(sDefault);i++) cout << " "; for(int i=0;i<strlen(sDefault);i++) cout << "\b"; cout << c; cin.putback(c); cin >> length_t; } cout << "\nLänge: " << length_t; getchar(); }
-
Öhm ... entweder liegts an mir, oder das Programm lässt mich einfach nix eingegeben, außer ein Buchstaben der geschrieben wird und es gibt Länge : 2293624 aus.
-
FreakY<3Cpp schrieb:
Öhm ... entweder liegts an mir, oder das Programm lässt mich einfach nix eingegeben, außer ein Buchstaben der geschrieben wird und es gibt Länge : 2293624 aus.
Meinst du meins? Ja, dann liegts an dir!
Bei mir lüppt jedenfalls alles.
-
_matze schrieb:
FreakY<3Cpp schrieb:
Öhm ... entweder liegts an mir, oder das Programm lässt mich einfach nix eingegeben, außer ein Buchstaben der geschrieben wird und es gibt Länge : 2293624 aus.
Meinst du meins? Ja, dann liegts an dir!
Bei mir lüppt jedenfalls alles.Bist du dir sicher
Sobald ich BackSpace oder sonst irgendeine andere Taste drücke, lässt das Programm mich nichts mehr machen und gibt aus "Länge : 2293624", egal was ich mache, außer wenn ich Enter drücke, dann steht dort 50.
-
Na, wenn du eine Zahl oder Enter drückst, dann klappts. Und bei einer Zahl wird der bisherige Standardwert gelöscht und der Cursor an diese Stelle gesetzt. Darum ging es ja. Alle möglichen Fehleingaben seitens des Users habe ich jetzt nicht abgefangen.

-
Hallo
Also schön, dass auf mein Problem so viele Ideen zusammen gekommen sind

Wobei der Effekt der Beispiele war nicht ganz was ich mir vorgestellt habe.Ich wollte ja eigentlich, dass der Defaultwert von Benutzer änderbar im Sinne von editierbar ist. Eigentlich hoffte ich, dass der cin Befehl noch irgendein Parameter kennt, der einen Vorgabewert zulässt. Immerhin wäre im cin schon ein kompletter Editor eingebaut. (Backspace zum zurückgehen, Delete zum einzelne Zeichen löschen, Zeichen anfügen etc.) Sowas scheint's aber nicht zu geben.
Meine andere Idee wäre spontan gewesen, den Vorgabewert irgendwie als Benutzereingabe zu simulieren, also irgendwie in den Keyboardbuffer zu bringen. Wüsste aber nicht wie das nach dem Befehl cin gehen sollte.
So wie's ausschaut, müsste man sich einen kleinen Editor schreiben, ähnlich wie _matzes Beispiele. Weiss aber nicht, ob sich das lohnt.
Hier aber noch mal ein anderes praktisches Beispiel:
IP Adresse des Zielcomputers: 192.168.0.120Oft müsste man hier nur ein oder 2 Ziffern ändern und als fauler Mensch möchte ich nicht immer die volle IP eingeben.

Danke auf jeden Fall mal für das bisherige Feedback.
