<?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[cin &amp;gt;&amp;gt; string liest nicht end-of-line]]></title><description><![CDATA[<p>Hallo zusammen !<br />
Versuche mir gerade C++ beizubringen, mit Hilfe des Buches &quot;C++ Primer&quot; von Lippman.<br />
Dort gibt es die Aufgabe mit &lt;string&gt; und &lt;vector&gt; ein Programm zu schreiben, dass einen Satz einliest und dann die Wörter einzeln in Zeilen ausgibt.<br />
Das Problem ist dass das Programm nach Eingabe des Satzes (mit [ENTER]) weiter auf eine Eingabe warten. (Benutze Visual Studio 2008 EE mit Standardeinstellung).<br />
______________________________________________________________________________</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
	vector&lt;string&gt; sz;
	string skette;

	cout &lt;&lt; &quot;Bitte geben Sie einen Satz ein: &quot; &lt;&lt; endl;

	while(cin &gt;&gt; skette )
	{
		//	if (skette == &quot;x&quot;) break; (momentane Notlösung)
			sz.push_back(skette);
	}

	for(vector&lt;string&gt;::size_type i = 0; i &lt; sz.size(); ++i)
	{
		cout &lt;&lt; sz[i] &lt;&lt; &quot;\n&quot; &lt;&lt;endl;
	}

	return 0;
}
</code></pre>
<p>_______________________________________________________________________________</p>
<p>Habe es auch mit &quot; while(getline(cin, skette)) &quot; versucht, ohne Erfolg.<br />
Wie kann man das elegant lösen ? <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/209655/cin-gt-gt-string-liest-nicht-end-of-line</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 15:07:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209655.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Apr 2008 21:35:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Tue, 01 Apr 2008 21:35:58 GMT]]></title><description><![CDATA[<p>Hallo zusammen !<br />
Versuche mir gerade C++ beizubringen, mit Hilfe des Buches &quot;C++ Primer&quot; von Lippman.<br />
Dort gibt es die Aufgabe mit &lt;string&gt; und &lt;vector&gt; ein Programm zu schreiben, dass einen Satz einliest und dann die Wörter einzeln in Zeilen ausgibt.<br />
Das Problem ist dass das Programm nach Eingabe des Satzes (mit [ENTER]) weiter auf eine Eingabe warten. (Benutze Visual Studio 2008 EE mit Standardeinstellung).<br />
______________________________________________________________________________</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
	vector&lt;string&gt; sz;
	string skette;

	cout &lt;&lt; &quot;Bitte geben Sie einen Satz ein: &quot; &lt;&lt; endl;

	while(cin &gt;&gt; skette )
	{
		//	if (skette == &quot;x&quot;) break; (momentane Notlösung)
			sz.push_back(skette);
	}

	for(vector&lt;string&gt;::size_type i = 0; i &lt; sz.size(); ++i)
	{
		cout &lt;&lt; sz[i] &lt;&lt; &quot;\n&quot; &lt;&lt;endl;
	}

	return 0;
}
</code></pre>
<p>_______________________________________________________________________________</p>
<p>Habe es auch mit &quot; while(getline(cin, skette)) &quot; versucht, ohne Erfolg.<br />
Wie kann man das elegant lösen ? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1484859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484859</guid><dc:creator><![CDATA[EibohphobiE]]></dc:creator><pubDate>Tue, 01 Apr 2008 21:35:58 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Tue, 01 Apr 2008 21:42:34 GMT]]></title><description><![CDATA[<p>wie ist die abbruchbedingung der while schleife?<br />
vielleicht fragst du nach ob skette existiert (leer ist).<br />
/pseudo<br />
if skette - break<br />
/pseudo<br />
wie, das findest du selber heraus.<br />
die schleife hat keinen grund abzubrechen, also tut sie es auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484864</guid><dc:creator><![CDATA[atoi]]></dc:creator><pubDate>Tue, 01 Apr 2008 21:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Tue, 01 Apr 2008 21:59:08 GMT]]></title><description><![CDATA[<p>Hmm, ich habe folgende Bedingungen ausprobiert :<br />
if (skette == &quot;&quot;) break;<br />
if (skette == &quot;\eof&quot;) break;</p>
<p>Klappt alles nicht. Kann man [ENTER] irgendwie als Wort lesen und in der Bedingung prüfen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484873</guid><dc:creator><![CDATA[Kyuss77]]></dc:creator><pubDate>Tue, 01 Apr 2008 21:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Tue, 01 Apr 2008 22:19:24 GMT]]></title><description><![CDATA[<p>EibohphobiE schrieb:</p>
<blockquote>
<p>Wie kann man das elegant lösen ? <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>
</blockquote>
<p>es ist jedenfalls gar nicht so einfach, schon gar nicht für einen Anfänger. Folgende Funktion 'eol()' liefert die Information, ob die Zeile zu Ende ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

using namespace std;

bool eol( std::istream&amp; in ) // liefert 'true' falls '\n' (LF) folgt, und konsumiert es
{
    std::streambuf* sb = in.rdbuf();
    if( !sb )
        return false;       // stream ist 'bad' -&gt; kein LF
    typedef std::istream::traits_type traits_type;
    const std::ctype&lt; char &gt;&amp; ct_ = use_facet&lt; std::ctype&lt; char &gt; &gt;( in.getloc() );
    for( std::istream::int_type m = sb-&gt;sgetc(); !traits_type::eq_int_type( m, traits_type::eof() ) ; m = sb-&gt;snextc() )
    {
        const char c = traits_type::to_char_type( m );
        if( m == '\n' )
        {
            sb-&gt;sbumpc();   // LF konsumieren
            return true;
        }
        if( !ct_.is( std::ctype_base::space, c ) )
            return false;   // nicht Space Zeichen folgt
    }
    return false;           // EOF
}

int main()
{
    vector&lt; string &gt; sz;
    cout &lt;&lt; &quot;Bitte geben Sie einen Satz ein: &quot; &lt;&lt; endl;
    for( string skette; !eol( cin ) &amp;&amp; cin &gt;&gt; skette;  )
    {
        sz.push_back(skette);
    }
    for( vector&lt;string&gt;::size_type i = 0; i &lt; sz.size(); ++i )
    {
        cout &lt;&lt; sz[i] &lt;&lt; &quot;\n&quot; &lt;&lt;endl;
    }
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484877</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 01 Apr 2008 22:19:24 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Tue, 01 Apr 2008 22:20:48 GMT]]></title><description><![CDATA[<p><a href="http://www.old.uni-bayreuth.de/departments/dmv/~rbaier/lectures/c/html/node62.html" rel="nofollow">http://www.old.uni-bayreuth.de/departments/dmv/~rbaier/lectures/c/html/node62.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484878</guid><dc:creator><![CDATA[atoi]]></dc:creator><pubDate>Tue, 01 Apr 2008 22:20:48 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Tue, 01 Apr 2008 22:25:21 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Die Konstruktion</p>
<pre><code class="language-cpp">while (cin &gt;&gt; skette) { 
//...
}
</code></pre>
<p>hat schon ihren Sinnn. Die Eingabe wird dann abgebrochen, wenn ein Dateiende erreicht ist oder ein <strong>ungültiger Wert</strong> für die Variable skette Eingegeben wird.</p>
<p>Ist skette z.B. eine Integer-Variable würde die Eingabe von Buchstaben zum Abbruch führen. Ist skette aber wie in deinem Beispiel ein string, so ist es doch recht &quot;schwierig&quot; eine ungültige Eingabe herbeizuführen. <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>
<p>Du kannst die Schleife z.B. mit der Eingabe von EOF (<strong>Strg + Z</strong> in Windows, <strong>Strg + D</strong> in Unix) beenden.</p>
<p>Gruß</p>
<p>//Edit: Nur kleine Korrekturen <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/1484879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484879</guid><dc:creator><![CDATA[vic1986]]></dc:creator><pubDate>Tue, 01 Apr 2008 22:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Tue, 01 Apr 2008 22:23:02 GMT]]></title><description><![CDATA[<p>ob ein anfänger salomons lösung versteht ist eine andere frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484881</guid><dc:creator><![CDATA[atoi]]></dc:creator><pubDate>Tue, 01 Apr 2008 22:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Wed, 02 Apr 2008 09:24:18 GMT]]></title><description><![CDATA[<p>Ja, Salomons Lösung versteh ich wirklicht nicht, noch nicht <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="🙂"
    /> . Aber danke für die schnellen Antworten. Mit dem Strg-Z funktioniert es vorerst ganz gut und werde mal die nächsten Übungen mit Iteratoren versuchen, vielleicht findet sich ja da eine Lösung.Falls trotzdem noch jemand eine Idee hat wie ich eine einfache Abbruchbedingung schreiben kann , immer her damit <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1485049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485049</guid><dc:creator><![CDATA[Kyuss77]]></dc:creator><pubDate>Wed, 02 Apr 2008 09:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Wed, 02 Apr 2008 10:34:15 GMT]]></title><description><![CDATA[<p>Was gefällt Dir denn an der 'getline'-Lösung nicht?</p>
<pre><code class="language-cpp">int main() {
    string line;
    if (!getline(cin, line))
        return 1;

    stringstream words;
    words &lt;&lt; line;
    string word;
    while (words &gt;&gt; word)
        cout &lt;&lt; word &lt;&lt; endl;
}
</code></pre>
<p>Mit den &lt;algorithm&gt;-Funktionen ( <code>copy</code> …) geht's noch ein wenig schicker aber diese Lösung ist doch schonmal wunderbar für den Anfang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485086</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 02 Apr 2008 10:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Wed, 02 Apr 2008 12:13:41 GMT]]></title><description><![CDATA[<p>Kyuss77 schrieb:</p>
<blockquote>
<p>Klappt alles nicht. Kann man [ENTER] irgendwie als Wort lesen und in der Bedingung prüfen ?</p>
</blockquote>
<p>ja kann man, such mal nach einer ascii tabelle (sollte in jedem halbwegs guten programmier buch stehen)</p>
<p>da sieht man dass der buchstabe (enter) 'CR' den code 13 hat<br />
also</p>
<pre><code class="language-cpp">char a;
a = getch();
if ( a == 13 ) 
    //blablabla
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1485175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485175</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 02 Apr 2008 12:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to cin &amp;gt;&amp;gt; string liest nicht end-of-line on Wed, 02 Apr 2008 12:43:46 GMT]]></title><description><![CDATA[<p>ich find die lösung mit dem eof zeichen am besten. Ist halt der weg, wies bei Unix gemacht wird, einfach am ende ein eof anhängen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485195</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 02 Apr 2008 12:43:46 GMT</pubDate></item></channel></rss>