<?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[stringstream gibt Muell aus]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein Phaenomen bei istringstream was ich nicht ganz verstehe, naemlich warum stringstream keine doubles schreiben kann und warum es den aktualisierten Wert nicht ausgibt. Hier der Beispielcode:</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
        std::stringstream ss;
        float fvar;
        double dvar;
        ss.str( &quot;1.2345&quot; );
        std::cout &lt;&lt; ss.str() &lt;&lt; std::endl;
        ss &gt;&gt; fvar;
        ss &gt;&gt; dvar;
        std::cout &lt;&lt; fvar &lt;&lt; std::endl &lt;&lt; dvar &lt;&lt; std::endl;
        ss.str( &quot;6.7890&quot; );
        std::cout &lt;&lt; ss.str() &lt;&lt; std::endl;
        ss &gt;&gt; fvar;
        ss &gt;&gt; dvar;
        std::cout &lt;&lt; fvar &lt;&lt; std::endl &lt;&lt; dvar &lt;&lt; std::endl;
        return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>1.2345
1.2345
2.07466e-317
6.7890
1.2345
2.07466e-317
</code></pre>
<p>Warum ist double immer 2.07466e-317 (ist der kleinste positive Wert den double annehmen kann in etwa)?<br />
Warum wird der float beim 2. Auslesen nicht geaendert?<br />
Immerhin entspricht mein Code dem Beispiel aus der FAQ.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219747/stringstream-gibt-muell-aus</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 19:03:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219747.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Aug 2008 08:39:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:39:08 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein Phaenomen bei istringstream was ich nicht ganz verstehe, naemlich warum stringstream keine doubles schreiben kann und warum es den aktualisierten Wert nicht ausgibt. Hier der Beispielcode:</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
        std::stringstream ss;
        float fvar;
        double dvar;
        ss.str( &quot;1.2345&quot; );
        std::cout &lt;&lt; ss.str() &lt;&lt; std::endl;
        ss &gt;&gt; fvar;
        ss &gt;&gt; dvar;
        std::cout &lt;&lt; fvar &lt;&lt; std::endl &lt;&lt; dvar &lt;&lt; std::endl;
        ss.str( &quot;6.7890&quot; );
        std::cout &lt;&lt; ss.str() &lt;&lt; std::endl;
        ss &gt;&gt; fvar;
        ss &gt;&gt; dvar;
        std::cout &lt;&lt; fvar &lt;&lt; std::endl &lt;&lt; dvar &lt;&lt; std::endl;
        return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>1.2345
1.2345
2.07466e-317
6.7890
1.2345
2.07466e-317
</code></pre>
<p>Warum ist double immer 2.07466e-317 (ist der kleinste positive Wert den double annehmen kann in etwa)?<br />
Warum wird der float beim 2. Auslesen nicht geaendert?<br />
Immerhin entspricht mein Code dem Beispiel aus der FAQ.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560637</guid><dc:creator><![CDATA[atwork]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:39:08 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:45:23 GMT]]></title><description><![CDATA[<p>Weil dein Stream nach dem ersten Einlesen (mit dem Float) leer ist?<br />
Edit: Desweiteren fehlt vor dem zweiten ss.str(...) ein ss.clear().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560642</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:46:09 GMT]]></title><description><![CDATA[<p>ok, stimmt <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="🙄"
    /><br />
Das erklaert aber nicht das problem warum nach dem erneuten Fuellen des Streams die Ausgabe falsch ist (Stream ist 6.7890, float 1.2345 nach ss &gt;&gt; fvar)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560646</guid><dc:creator><![CDATA[atwork]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:47:26 GMT]]></title><description><![CDATA[<p>wieso ein clear? ss.str(&quot;...&quot;) setzt doch nen neuen Wert? Und der Stream hat ja den korrekten Wert drin, gibt ihn aber nicht aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560651</guid><dc:creator><![CDATA[atwork]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:50:14 GMT]]></title><description><![CDATA[<p>atwork schrieb:</p>
<blockquote>
<p>wieso ein clear? ss.str(&quot;...&quot;) setzt doch nen neuen Wert? Und der Stream hat ja den korrekten Wert drin, gibt ihn aber nicht aus</p>
</blockquote>
<p>Beim zweiten Lesen konnte aus dem leeren Stream kein gültiger Double ausgelesen werden, deshalb ist ein Fehlerstatus gesetzt. Dieser Fehlerstatus wird mit clear gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560653</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:50:14 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:50:19 GMT]]></title><description><![CDATA[<p>wieso ein clear? ss.str(&quot;...&quot;) setzt doch nen neuen Wert? Und der Stream hat ja den korrekten Wert drin, gibt ihn aber nicht aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560654</guid><dc:creator><![CDATA[atwork]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:50:19 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:50:45 GMT]]></title><description><![CDATA[<p>Weil nur der Inhalt des Streams mit str(...) geändert wird, nicht dessen Status (eof). Daher wird danach davon ausgegangen das nichts mehr kommt. Ist zwar etwas umständlich, gehört aber wohl so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560655</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:50:45 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 08:56:28 GMT]]></title><description><![CDATA[<p>sorry fuer den Doppelpost.</p>
<p>Ok, das war die fehlende Information, dass ich mit clear die errorflag zuruecksetzen muss. Setzt ss.str(&quot;&quot;) eigentlich auch den stream position pointer zurueck? Weil die Ausgabe von ss.str() nachdem ich die Floatvariable gefuellt habe ist noch immer 1.2345, allerdings muss der Streampointer jetzt ja dahinter sitzen weil der double nicht gefuellt werden kann.<br />
Weil</p>
<pre><code class="language-cpp">ss.str(&quot;1.2345&quot;);
ss &gt;&gt; dval;
ss.str(&quot;6.7890&quot;);
ss &gt;&gt; dval;
</code></pre>
<p>gibt noch immer 1.2345 nach dem 2. schreiben aus, sprich es gab einen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560660</guid><dc:creator><![CDATA[atwork]]></dc:creator><pubDate>Thu, 07 Aug 2008 08:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 09:00:10 GMT]]></title><description><![CDATA[<p>Also str(...) ändert einfach nur den Inhalt des Streams, die Flags bleiben bestehen. In deinem Beispiel steht dann zwar der zweite String im Stream, beim zweiten Auslesen hat der Stream aber noch die Flags vom vorherigen Einlesen gesetzt (trotz str(...)). In diesem Fall eof, sprich er glaubt beim Stream am Ende zu sein und daher scheitert das zweite Einlesen (fvar bleibt unverändert). Ob das nun fehlgeschlagen ist, kannst du mit ss.fail() feststellen und bevor du den Stream weiter verwendest, musst du dieses Flag wieder entfernen (zB mit clear()).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560662</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 07 Aug 2008 09:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to stringstream gibt Muell aus on Thu, 07 Aug 2008 09:04:35 GMT]]></title><description><![CDATA[<p>super, danke, wieder was gelernt.</p>
<p>Habs auch schon entsprechend angepasst. Einen Stream also wieder in den Ursprungszustand zu versetzen muss man</p>
<pre><code class="language-cpp">ss.str(&quot;&quot;);
ss.clear()
</code></pre>
<p>ausfuehren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560670</guid><dc:creator><![CDATA[atwork]]></dc:creator><pubDate>Thu, 07 Aug 2008 09:04:35 GMT</pubDate></item></channel></rss>