<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Probleme mit cin und while]]></title><description><![CDATA[<p>Hallo,</p>
<p>vorweg gesagt: Ich bin ein totaler Anfänger und versuche mir C++ mit dem Buch &quot;C++ Primer&quot; beizubringen.</p>
<p>Nun wollte ich ein kleines Programm schreiben, dass eine unbekannte Anzahl an Zeichenfolgen (durch Leerzeichen getrennt) über die Standardeingabe (cin) einließt und sie mir zu einem langen String zusammensetzt (ohne Leerzeichen) und anschließend - ganz am Programmende - den resultierenden String ausgibt.</p>
<p>Hier mein kleines Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
	cout &lt;&lt; &quot;Bitte eine Reihe Zeichenfolgen eingeben.&quot; &lt;&lt; endl;
	string st;
	string result;
	while(cin &gt;&gt; st)
	{
		result += st;
	}
	cout &lt;&lt; result &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Eine Fehlermeldung gibt mir der Compiler nicht aus und ich kann das Programm auch soweit ausführen, doch wird mir niemals &quot;result&quot; am Ende ausgegeben. Ich habe irgendwie die Befürchtung, dass er kein EOF-Signal bekommt, weitere Eingaben erwartet und somit die while-Schleife nicht verlässt.</p>
<p>Ein Ähnliches Problem hatte ich Gestern bei einem anderen kleinen Programm mit einer ähnlichen While-Schleife. Der Code, der nach dieser While-Schleife kommt, wird nicht mehr beachtet.</p>
<p>Wenn ich die While-Schleife etwas abändere und die Ausgabe von &quot;result&quot; in die Schleife hinein verlege, läuft es einwandfrei durch.</p>
<p>Übersehe ich irgendwo einen kleinen Fehler, den der Compiler (GCC) ignoriert?</p>
<p>Grüße,<br />
Bohne</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206730/probleme-mit-cin-und-while</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 15:53:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206730.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Feb 2008 10:48:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 10:53:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vorweg gesagt: Ich bin ein totaler Anfänger und versuche mir C++ mit dem Buch &quot;C++ Primer&quot; beizubringen.</p>
<p>Nun wollte ich ein kleines Programm schreiben, dass eine unbekannte Anzahl an Zeichenfolgen (durch Leerzeichen getrennt) über die Standardeingabe (cin) einließt und sie mir zu einem langen String zusammensetzt (ohne Leerzeichen) und anschließend - ganz am Programmende - den resultierenden String ausgibt.</p>
<p>Hier mein kleines Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
	cout &lt;&lt; &quot;Bitte eine Reihe Zeichenfolgen eingeben.&quot; &lt;&lt; endl;
	string st;
	string result;
	while(cin &gt;&gt; st)
	{
		result += st;
	}
	cout &lt;&lt; result &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Eine Fehlermeldung gibt mir der Compiler nicht aus und ich kann das Programm auch soweit ausführen, doch wird mir niemals &quot;result&quot; am Ende ausgegeben. Ich habe irgendwie die Befürchtung, dass er kein EOF-Signal bekommt, weitere Eingaben erwartet und somit die while-Schleife nicht verlässt.</p>
<p>Ein Ähnliches Problem hatte ich Gestern bei einem anderen kleinen Programm mit einer ähnlichen While-Schleife. Der Code, der nach dieser While-Schleife kommt, wird nicht mehr beachtet.</p>
<p>Wenn ich die While-Schleife etwas abändere und die Ausgabe von &quot;result&quot; in die Schleife hinein verlege, läuft es einwandfrei durch.</p>
<p>Übersehe ich irgendwo einen kleinen Fehler, den der Compiler (GCC) ignoriert?</p>
<p>Grüße,<br />
Bohne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464617</guid><dc:creator><![CDATA[Bohne2k7]]></dc:creator><pubDate>Thu, 28 Feb 2008 10:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 11:00:46 GMT]]></title><description><![CDATA[<p>Dein Programm wartet so lange auf eine Eingabe, bis die Eingabe geschlossen wird (oder ein Fehler auftritt). Und genau das steht auch im Quelltext, von daher hat der GCC schon alles richtig gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Verstehe ich richtig: Du willst eine Zeile einlesen und aus dieser dann die einzelnen Wörter heraustrennen? Das könntest Du (z.B.) machen, indem Du auch nur eine Zeile einliest, und über diese dann mit einem Stringstream liest, bis die Eingabe geschlossen wird (was am Ende des Strings der Fall sein wird).</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Bitte eine Reihe Zeichenfolgen eingeben.&quot; &lt;&lt; endl;
    string zeile;
    getline(cin, zeile);

    istringstream s(zeile);
    string wort;
    string result;
    while (s &gt;&gt; wort)
    {
        result += st;
    }
    cout &lt;&lt; result &lt;&lt; endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1464624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464624</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 28 Feb 2008 11:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 11:10:32 GMT]]></title><description><![CDATA[<p>Oder Buchstabe für Buchstabe:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    cout &lt;&lt; &quot;Bitte eine Reihe Zeichenfolgen eingeben.&quot; &lt;&lt; endl;
    char ch;
    string result;
    while((ch = cin.get()) != '\n')
    {
        result += ch;
    }
    cout &lt;&lt; result &lt;&lt; endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1464625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464625</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 28 Feb 2008 11:10:32 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 11:32:12 GMT]]></title><description><![CDATA[<p>Vielen Dank! Ich denke, ersterer Vorschlag (wortweise) ist effektiver und schneller, da weniger Durchläufe der While-Schleife nötig sind. Oder?</p>
<p>Das Programm funktioniert und ich bin glücklich. *jeaha* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Bin aber dennoch etwas verwirrt, denn irgendwie muss das auch ohne den Funktionen/Typen &quot;get()&quot; und &quot;istringstream&quot; gehen. Diese werden erst viel später im Buch erwähnt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Nun egal. Das Problem ist gelöst, ich bin schlauer. Ein guter Tag: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Grüße,<br />
Bohne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464638</guid><dc:creator><![CDATA[Bohne2k7]]></dc:creator><pubDate>Thu, 28 Feb 2008 11:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 13:48:24 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Dein Programm wartet so lange auf eine Eingabe, bis die Eingabe geschlossen wird (oder ein Fehler auftritt). Und genau das steht auch im Quelltext, von daher hat der GCC schon alles richtig gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Nochmal hierzu zurück.</p>
<p>Ich habe jetzt etwas weiter rumprobiert und mich an einer weiteren Aufgabe in meinem Buch versucht. Dort soll nun eine Reihe von Integerzahlen in einen Vektor eingelesen und anschließend einige Berechnungen mit den einzelnen Elementen des Vektors durchgeführt werden.</p>
<p>Soweit so gut. Das Abspeichern der einzelnen Integerzahlen realisierte ich wieder mit einer while-Schleife, so wie es in anderen Beispielen im Buch vorgegeben ist.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int main()
{
	cout &lt;&lt; &quot;Bitte eine Reihe Zahlen eingeben.&quot; &lt;&lt; endl;

	vector&lt;int&gt; vec;
	int i = 0;
	unsigned x = 0;

	while(cin &gt;&gt; i)
	{
		vec.push_back(i);
		++x;
	}

	for(vector&lt;int&gt;::size_type ix = 0; ix &lt;= x; ++ix)
	{
		cout &lt;&lt; &quot;Das &quot; &lt;&lt; ix+1 &lt;&lt; &quot;. Element in vec ist &quot; &lt;&lt; vec[ix] &lt;&lt; &quot;.&quot; &lt;&lt; endl;
	}

	return 0;
}
</code></pre>
<p>Nachdem man eine Reihe Integerzahlen eingegeben und mit Enter abgeschlossen hat, erwartet das Programm, wie ich jetzt weiß, weitere Eingaben, da noch kein EOF oder Fehler aufgetreten ist. Wenn ich nun z.B. einen Buchstaben eingebe, ist es ein Fehler und die for-Schleife wird durchlaufen.</p>
<p>Gebe ich nun beispielsweise die Reihe &quot;3 4 5 6 d&quot; ein, so besteht der Vektor aus den Elementen 0-&gt;3, 1-&gt;4, 2-&gt;5, 3-&gt;6, 4-&gt;0. Das fehlerhafte &quot;d&quot; hat er in eine 0 umgewandelt (wohl, weil ich i mit 0 initialisiert habe).</p>
<p>Was muss ich eingeben bzw. wie muss ich mein kleines Programm umändern, so dass das eingegebene &quot;Enter&quot; als Eingabeende anerkannt wird? Ist es hilfreich wieder über getline() zu arbeiten und dann &quot;wortweise&quot; die Zahlen in den Vektor einzulesen? Das letzte Element des Vektors ist aber wieder null, wie oben.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt;
using namespace std;

int main()
{
	cout &lt;&lt; &quot;Bitte eine Reihe Zahlen eingeben.&quot; &lt;&lt; endl;
	string zeile;
	getline(cin, zeile);

	vector&lt;int&gt; vec;
	istringstream s(zeile);
	int i = 0;
	unsigned x = 0;
	while(s &gt;&gt; i)
	{
		vec.push_back(i);
		++x;
	}
	// for-Schleife wie oben
	return 0;
}
</code></pre>
<p>Dann bleibt aber noch die Frage, warum bei den Beispielen im Buch nicht auf dieses Problem mit dem fehlenden Eingabeende hingewiesen wird. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Leider habe ich noch nirgends Musterlösungen zu den Aufgaben gefunden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Grüße,<br />
Bohne</p>
<p>PS: Sry, für den Doppelpost <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464756</guid><dc:creator><![CDATA[Bohne2k7]]></dc:creator><pubDate>Thu, 28 Feb 2008 13:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 13:53:11 GMT]]></title><description><![CDATA[<p>Der erste Fehler ist das du ix &lt;= x prüfst. Müsste ix &lt; x sein. Oder besser noch ix &lt; vec.size()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464759</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 28 Feb 2008 13:53:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 14:34:59 GMT]]></title><description><![CDATA[<p>Der Orginalcode des Threaderstellers funktioniert wunderbar. Man muss eben die Eingabe mit EOF beenden, wie das geht hängt von der Shell ab, normal mit STRG+D. Das guter Stil und kann ruhig so bleiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464781</guid><dc:creator><![CDATA[Berichtiger]]></dc:creator><pubDate>Thu, 28 Feb 2008 14:34:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 14:59:55 GMT]]></title><description><![CDATA[<p>Danke, Fellhuhn. Mit diesen Vergleichen stehe ich immer auf Kriegsfuß :-| Funktioniert nun einwandfrei.</p>
<p>Berichtiger schrieb:</p>
<blockquote>
<p>Der Orginalcode des Threaderstellers funktioniert wunderbar. Man muss eben die Eingabe mit EOF beenden, wie das geht hängt von der Shell ab, normal mit STRG+D.</p>
</blockquote>
<p>Und woher weiß das der 0815-Standard-DAU? (wie ich es bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> ) Kann man das nicht irgendwie durch das Programm erzwingen? Zum Beispiel maximal eine Zeile Eingabe und ein &quot;Enter&quot; schließt die Eingabe ab und erzwingt EOF?</p>
<p>Grüße,<br />
Bohne</p>
<p>PS: &quot;Das guter Stil und kann ruhig so bleiben.&quot; &lt;-- Wenn da ein &quot;ist&quot; fehlt: Danke für das Kompliment! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464788</guid><dc:creator><![CDATA[Bohne2k7]]></dc:creator><pubDate>Thu, 28 Feb 2008 14:59:55 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 15:34:29 GMT]]></title><description><![CDATA[<p>Der DAU verwendet keine Konsolenanwendungen. Bei Konsolenanwendungen ist das verwenden von einer EOF-Escape-Sequenz üblich, siehe alle gängigen Unix-Tools.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464824</guid><dc:creator><![CDATA[Berichtiger]]></dc:creator><pubDate>Thu, 28 Feb 2008 15:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 16:59:12 GMT]]></title><description><![CDATA[<p>Darauf wollte ich mit &quot;Dein Programm wartet so lange auf eine Eingabe, bis die Eingabe geschlossen wird&quot; hinaus, ich wollte den Anfänger aber nicht mit Begriffen wie EOF und Unix-Shell langweilen. Zumal er ja mit nicht geringer Wahrscheinlichkeit auch Windows nutzen könnte, und da funktioniert das mit dem EOF-Signal IMO nicht so besonders gut.</p>
<p>Außerdem wäre nach einem EOF die Standardeingabe bis zum Ende des Programmlaufs nicht mehr ansprechbar, das kann es doch auch nicht sein. Deshalb lern lieber erstmal, mit zeilenweiser Eingabe umzugehen (gängiges Konzept aller Konsolen, egal ob Windows, Unix oder sonstwas :D), da hat Dein Programm länger was von.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464906</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 28 Feb 2008 16:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cin und while on Thu, 28 Feb 2008 17:06:36 GMT]]></title><description><![CDATA[<p>Ah! *klick* Danke für die Erklärung! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Werde mir das mal zu Herzen nehmen und mich wieder in die nächsten Kapitel vertiefen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüße,<br />
Bohne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464914</guid><dc:creator><![CDATA[Bohne2k7]]></dc:creator><pubDate>Thu, 28 Feb 2008 17:06:36 GMT</pubDate></item></channel></rss>