PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cin in nur einer Zeile an mehreren Variablen zuweisen?



NUFlana
12.12.2016, 13:30
Tag,

ist es möglich, Eingaben mit cin >> in einer Zeile an MEHRERE Variablen zu übergeben?

Beispiel mit nur einer Variablen:
cout << "Farbe eingeben: \n";
cin >> Variable1

Beispiel mit zwei Variablen (funktioniert natürlich nicht)
cout << "Farbe eingeben: \n";
cin >> Variable1, Variable2


Und noch eine Frage:
Kann man den Wert mit cin an eine Variable übergeben und den neuen Wert mit dem cin Wert addieren OHNE den Wert von cin an eine Variable zu übergeben?... Etwas verständlicher: kann man mehrere Werte über cin addieren (ich lese z.B. nacheinander 4 werte über cin ein), ohne zwei Variablen zu benutzen, sondern nur eine?

So funktionierts leider nicht:
cout << "wert 1:\n";
variable1 = variable 1 + cin
cout << "wert 2:\n";
variable1 = variable 1 + cin
cout << "wert 3:\n";
variable1 = variable 1 + cin
cout << "wert 4:\n";

i_make_it
12.12.2016, 13:59
Versuch mal:

cin >> Variable1 >> Variable2

(http://www.cpp-tutor.de/cpp/le04/cin.html)http://www.cpp-tutor.de/cpp/le04/cin.html

(http://www.cpp-tutor.de/cpp/le04/cin.html)Oder soll in Variable 2 das stehen was auch in Variable 1 steht?
Und wenn ja warum? (steht doch schon in Variable 1).

variable1 = variable 1 + cin

Wie Soll das denn gehen?
cin ist ein Datenstrom.
Woher soll der Compiler an der Stelle wissen ob du eine logische Verknüpfung von chars zu einem String vornehmen willst oder ob Du da eine arimetrische Addition von Integer Werten vornehmen willst.




(http://www.cpp-tutor.de/cpp/le04/cin.html)

Trauerkloß
12.12.2016, 15:39
i_make_it @: Frage 1 kannst du verwerfen, Denkfehler!

"Woher soll der Compiler an der Stelle wissen ob du eine logische Verknüpfung von chars zu einem String vornehmen willst oder ob Du da eine arimetrische Addition von Integer Werten vornehmen willst."
Kann man den Eingabestream nicht konvertieren? Z.B. wie in VBA mit Cint() oder so änhlich?

shedepe
12.12.2016, 15:46
Der Eingabestream ist vom Typ std::istream. Der << oder >> ist ein überladener Operator der den Inhalt des Streams in eine Variable reinschreibt bw. davon liest. D.h. Schreib in deine Variable und verwende diese dann. Man kann direkt auf den Stream zugreifen. Will man aber nicht.

Alle Infos findet man außerdem in der C++ Doku die man zuerst anschauen sollte: http://www.cplusplus.com/reference/istream/istream/

i_make_it
12.12.2016, 16:03
ist es möglich, Eingaben mit cin >> in einer Zeile an MEHRERE Variablen zu übergeben?

cout << "Farbe eingeben: \n";
cin >> Variable1 >> Variable2


wieso Denkfehler?
Wenn die eingegebene Farbe "Blas Blau" ist, dann enthält Variable1 "Blas" und Variable2 "Blau".
Das ist was anderes wie wenn beide Variablen "Blas Blau" enthalten sollen.

Wenn man sich mal den Text hinter meinem Link duchliest, wird das noch komplexer, da der Tastaturpuffer ja auch die Escapesequenz vom Betätigen der Entertaste enthält.
Üblicherweise liest man mit cin in eine Variable ein, macht eine Plausibilitätsprüfung des Variableninhaltes. (erwarte Zahl, bekomme aber Alphanumerisch).
Und dann verarbeitet man das.
Man kann auch ungeprüft arbeiten oder direkt mit dem Puffer.
Die Frage ist, will man das?

Genauso stellt sich halt die Frage warum den selben Wert in zwei Variablen speichern?
Eventuell wird hier eine Lösung für "kein" Problem gesucht sondern um unsaubere Progarmierung irgendwie zum laufen zu bringen.
Das sollte erst mal geklärt werden bevor ein Rattenschwanz von Folgeproblemen nachfolgt.

Unregistriert
12.12.2016, 18:54
ich weiß nicht ob das weiterhilft -
Sollen denn Strings oder Zahlen eingelesen werden - oder beides gemischt?
2 strings zu trennen wird sicher schierig werde, aber in allen anderen Fällen würde ich eher scanf verwenden, da weiß man was man kriegt (oder kriegen soll).
Warum muss man immer c++ dafür herbeiquälen?
http://www.cplusplus.com/reference/cstdio/scanf/?kw=scanf

Trauerkloß
13.12.2016, 14:02
ich habe mit Antwort von Frage 2 auf eine Antwort auf Frage 1 gehofft. Dabei habe ich festgestellt, das ich da einen Denkfehler gemacht habe. Denn mit der Antwort der Frage/Problem 2 kann ich nicht das Problem der Frage 1 beantworten (ein Denkfehler meinerseits).

ich habe bereits eine Lösung gefunden. Letztendlich war es nur eine Winzigkeit. ich Danke euch für die Hilfe
thank you