Zahlenfolge addieren
-
Hallo alle zusammen,
Ich möchte gerne das man eine Zahlenfolge eingeben kann und die einzelnen Zahlen dann addiert werden. Das Ergebnis soll dann ausgegeben werden.
So sieht mein Code bis jetzt aus...
#include <iostream> #include <iterator> int main() { int sum = 0; std::cout << "Bitte Zahlenfolge eingeben: "; std::istream_iterator<int> streamEnd; std::istream_iterator<int> streamIterator(std::cin); for (; streamIterator != streamEnd; ++streamIterator) sum += *streamIterator; std::cout << "Ergebnis: " << sum; }Die for Schleife will irgendwie nicht funktionieren, liegt wohl an dem Iterator, oder? Wie kann ich das lösen?
Liebe Grüße,
NeuerMann
-
Wenn du das schon so machen willst, dann nimm auch accumulate noch dazu:
int sum = std::accumulate(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), 0);
-
std::accumulate kannte ich nicht, jedoch liefert dein Beispiel genau so wenig ein Ergebnis wie mein Code.
-
NeuerMann schrieb:
Die for Schleife will irgendwie nicht funktionieren
Tolle Fehlerbeschreibung.
Wie gibst du denn das Ende ein?
-
Die for Schleife will irgendwie nicht funktionieren, liegt wohl an dem Iterator, oder?
Fehler bitte genau beschreiben! Bei mir funktioniert dein Code.
Wie gibst du denn das Ende ein?
Indem eine Nicht-Zahl eingegeben wird.
-
Ich wusste nicht das man ein Zeichen eingeben muss, welches kein Integer Wert, um die Iteration abzubrechen. Ich dachte std::istream_iterator hört am Ende der Eingabe auf, kann man das irgendwie so realisieren? Wenn ja, wie?
-
NeuerMann schrieb:
Ich wusste nicht das man ein Zeichen eingeben muss, welches kein Integer Wert, um die Iteration abzubrechen. Ich dachte std::istream_iterator hört am Ende der Eingabe auf, kann man das irgendwie so realisieren? Wenn ja, wie?
Es hört doch am Ende der Eingabe auf. Fragt sich nur, was du dir darunter vorstellst.
Wenn eine Datei reingepiped wird, hört es am Ende der Datei auf.
Wenn du es von Hand eingibst, hört es dann auf, wenn du Strg+D (Unix) oder Strg+Z (Windows) tippst.Es hört nicht am Ende der Zeile auf.
-
NeuerMann schrieb:
Ich wusste nicht das man ein Zeichen eingeben muss, welches kein Integer Wert, um die Iteration abzubrechen. Ich dachte std::istream_iterator hört am Ende der Eingabe auf, kann man das irgendwie so realisieren? Wenn ja, wie?
Tut es doch auch. Aber was ist Ende der Eingabe? Wenn du auf einem Terminal arbeitest (Tastatur und bildschirm) ist das sicherlich nicht, dass du aufhörst zu tippen. Wie lange sollte denn gewartet werden, bis etwas keine Tipppause mehr ist?
Stattdessen gibt es auf vielen Terminals bestimmte Tastenkombinationen, mit denen du das Ende einer manuellen Eingabe markieren kannst. Unter Windows ist das CTRL+Z, unter linuxartigen Systemen CTRL+D.
-
Danke, wieder was dazu gelernt. Die Tastenkombinationen waren mir nicht bekannt.