<?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[string aus Datei wird bei cout verschluckt &#x2F; überschrieben]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe hier eine Textdatei, deren Inhalt exakt bekannt ist, so dass ich mir dachte, dass ich sie ohne Schleife auslese.</p>
<pre><code class="language-cpp">string MonsterName;
	string sMonsterTP;
	string sMonsterIniMod;

	ifstream datei;
	datei.open(&quot;Monster.chr&quot;, ios::binary|ios::in);

	getline(datei, MonsterName);
	getline(datei, sMonsterTP);
	getline(datei, sMonsterIniMod);

	datei.close();

	stringstream Str;
    Str &lt;&lt; sMonsterTP;
    int MonsterTP;
    Str &gt;&gt; MonsterTP;

	Str &lt;&lt; sMonsterIniMod;
    int MonsterIniMod;
    Str &gt;&gt; MonsterIniMod;

	cout &lt;&lt; MonsterName &lt;&lt; &quot;Das ist ein Test&quot; &lt;&lt; endl;
</code></pre>
<p>Der Inhalt der Textdatei ist</p>
<pre><code>Drache
100
10
5
</code></pre>
<p>Dummerweise ist vom &quot;Drache&quot; nichts mehr zu lesen, da &quot;Das ist ein Test&quot; die Ausgabe überschreibt. Kann es sein, dass die Länge des Strings &quot;MonsterName&quot; dem Programm aus irgendeinem Grund nicht bekannt ist und deshalb die Ausgabe nicht zu sehen ist? Wenn ich den &quot;Test&quot; Satz weglasse, wird mir &quot;Drache&quot; korrekt angezeigt.<br />
Was kann ich tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293076/string-aus-datei-wird-bei-cout-verschluckt-überschrieben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 10:31:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293076.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Sep 2011 00:50:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 00:50:01 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe hier eine Textdatei, deren Inhalt exakt bekannt ist, so dass ich mir dachte, dass ich sie ohne Schleife auslese.</p>
<pre><code class="language-cpp">string MonsterName;
	string sMonsterTP;
	string sMonsterIniMod;

	ifstream datei;
	datei.open(&quot;Monster.chr&quot;, ios::binary|ios::in);

	getline(datei, MonsterName);
	getline(datei, sMonsterTP);
	getline(datei, sMonsterIniMod);

	datei.close();

	stringstream Str;
    Str &lt;&lt; sMonsterTP;
    int MonsterTP;
    Str &gt;&gt; MonsterTP;

	Str &lt;&lt; sMonsterIniMod;
    int MonsterIniMod;
    Str &gt;&gt; MonsterIniMod;

	cout &lt;&lt; MonsterName &lt;&lt; &quot;Das ist ein Test&quot; &lt;&lt; endl;
</code></pre>
<p>Der Inhalt der Textdatei ist</p>
<pre><code>Drache
100
10
5
</code></pre>
<p>Dummerweise ist vom &quot;Drache&quot; nichts mehr zu lesen, da &quot;Das ist ein Test&quot; die Ausgabe überschreibt. Kann es sein, dass die Länge des Strings &quot;MonsterName&quot; dem Programm aus irgendeinem Grund nicht bekannt ist und deshalb die Ausgabe nicht zu sehen ist? Wenn ich den &quot;Test&quot; Satz weglasse, wird mir &quot;Drache&quot; korrekt angezeigt.<br />
Was kann ich tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123383</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Sun, 25 Sep 2011 00:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 01:13:36 GMT]]></title><description><![CDATA[<p>Ich habe zwar keine Ahnung, was das Problem ist (Ich vermute es liegt an binary), aber du kannst das alles viel einfacher haben:</p>
<pre><code class="language-cpp">std::string name;
int tp, ini_mod;

{
    std::ifstream in(&quot;Monster.chr&quot;); // wir öffnen im Konstruktor, nennt man RAII
    in &gt;&gt; name &gt;&gt; tp &gt;&gt; ini_mod;
} // die datei wird für uns dank RAII automatisch geschlossen, .close() unnötig
</code></pre>
<p>Beim Einlesen werden alle Leerzeichen, Newlines, Tabulatoren u.ä. übersprungen.</p>
<p>Was mir dann noch aufgefallen ist: In der Datei stehen zwar 4 Werte, du liest aber nur 3 ein. Den vierten kannst du nun aber einfach dazuschreiben, ist ja nicht schwer.</p>
<p>Beachte, dass der von mir eingefügte Scope {} nicht sinnlos ist. Die Datei bleibt nur solange offen, wie sie auch wirklich gebraucht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123384</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 25 Sep 2011 01:13:36 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 02:04:54 GMT]]></title><description><![CDATA[<p>TRWTF ist, dass <code>MonsterName</code> im Gegensatz zu <code>sMonsterTP</code> und <code>sMonsterIniMod</code> kein String ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123386</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 25 Sep 2011 02:04:54 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 04:14:08 GMT]]></title><description><![CDATA[<p>thuering schrieb:</p>
<blockquote>
<p>Dummerweise ist vom &quot;Drache&quot; nichts mehr zu lesen, da &quot;Das ist ein Test&quot; die Ausgabe überschreibt.</p>
</blockquote>
<p>du hast den stream im binary mode geoeffnet. da wird dann von 'getline' nur das '\n' zeichen aus der ausgelesenen zeile rausgenommen.<br />
unter windows wird ein zeilenende aber durch die zeichenfolge '\r\n' repraesentiert. nun bleibt dir nach dem wort drache noch das '\r' zeichen uebrig. das zeichen bewirkt das der cursor wieder zum zeilenanfang spring. dadurch wird drache bei der naechsten textausgabe ueberschrieben.<br />
du musst also den stream im text-mode oeffnen, oder nach dem anwenden von getline nachsehen ob im string als letztes zeichen noch ein '\r' steht und dieses loeschen.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123389</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sun, 25 Sep 2011 04:14:08 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 14:25:53 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Beim Einlesen werden alle Leerzeichen, Newlines, Tabulatoren u.ä. übersprungen.</p>
</blockquote>
<p>Deine Lösung ist natürlich genial - allerdings werden in Zukunft wohl auch Strings mit Leerzeichen ausgelesen werden müssen (z.B. &quot;Grüner Drache&quot; <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="😉"
    /> ). Wie ließe sich das bewerkstellen, geht das irgendwie auch mit der supereleganten RAII-Methode?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123498</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Sun, 25 Sep 2011 14:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 14:32:20 GMT]]></title><description><![CDATA[<p>Dann nimmst du einfach für den ersten String getline() und danach für die beiden ints den operator &gt;&gt;. <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>RAII ist übrigens ein allgemeines Konzept. Fall du es noch nicht kennst, solltest du es dir ansehen: <a href="http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization" rel="nofollow">http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123499</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 25 Sep 2011 14:32:20 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 14:35:02 GMT]]></title><description><![CDATA[<p>thuering schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Beim Einlesen werden alle Leerzeichen, Newlines, Tabulatoren u.ä. übersprungen.</p>
</blockquote>
<p>Deine Lösung ist natürlich genial - allerdings werden in Zukunft wohl auch Strings mit Leerzeichen ausgelesen werden müssen (z.B. &quot;Grüner Drache&quot; <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="😉"
    /> ). Wie ließe sich das bewerkstellen, geht das irgendwie auch mit der supereleganten RAII-Methode?</p>
</blockquote>
<p>Dafür haut mich volkard bestimmt:</p>
<pre><code class="language-cpp">ifstream datei(&quot;Monster.chr&quot;);

    string MonsterName;
    int MonsterTP, MonsterIniMod;
    getline(datei, MonsterName) &gt;&gt; MonsterTP &gt;&gt; MonsterIniMod;
</code></pre>
<p>Es wird geringfügig komplizierter, falls danach noch weitere getlines folgen, weil die dann denken, dass die Zeile sofort endet, da das letzte &gt;&gt; ein Zeilenendzeichen im Stream lässt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123500</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 25 Sep 2011 14:35:02 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 14:44:07 GMT]]></title><description><![CDATA[<p>Dann habe ich wieder das Problem des verschwindenden Strings bei der Ausgabe - s.o.<br />
Mit welchem String-Operator kann ich denn effektiv die letzten beiden Zeichen &quot;\r&quot; löschen? Oder gibt es vllt. die Möglichkeit, mit einem geeigneten Text-Editor (ich habe hier Notepad++) das \r zu löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123502</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Sun, 25 Sep 2011 14:44:07 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 17:43:50 GMT]]></title><description><![CDATA[<p>Vielen Dank ihr Beiden, die Sache läuft nun rund!<br />
Ich habe es jetzt mal mit 2 Strings hintereinander versucht, diese Lösung hier liefert alle Ergebnisse <strong>einwandfrei</strong>:</p>
<pre><code class="language-cpp">string MonsterName, MonsterRasse;
    int MonsterTP, MonsterIniMod;
    getline(datei, MonsterName);
	getline(datei, MonsterRasse) &gt;&gt; MonsterTP &gt;&gt; MonsterIniMod;
</code></pre>
<p>Wenn ich es so mache, dann wird bei &quot;Gruener Drache&quot; das &quot;Drache&quot; bei der Ausgabe per cout &quot;<strong>verschluckt</strong>&quot;:</p>
<pre><code class="language-cpp">string MonsterName, MonsterRasse;
    int MonsterTP, MonsterIniMod;
    getline(datei, MonsterName) &gt;&gt; MonsterRasse &gt;&gt; MonsterTP &gt;&gt; MonsterIniMod;
</code></pre>
<p>Ist das erklärbar oder handelt es sich hier tatsächlich um einen &quot;Bug&quot;?</p>
<p>Achja, Inhalt der ausgelesenen Datei:</p>
<pre><code>Tharaxyxyl
Gruener Drache
100
10
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2123547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123547</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Sun, 25 Sep 2011 17:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 17:56:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Ist das erklärbar oder handelt es sich hier tatsächlich um einen &quot;Bug&quot;?</p>
</blockquote>
<p>Nein, das ist dann ganz normal. Oben hast du eine ganz andere Datei gepostet, der Einlesevorgang den ich dir geschreiben habe passt zu deren Format, nicht zu dem neuen. Verstehe was du tust und schreib nicht blind ab!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123552</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 25 Sep 2011 17:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 17:56:02 GMT]]></title><description><![CDATA[<p>Das &quot;Drache&quot; wird nicht bei cout geschluckt, sondern einfach nicht mit eingelesen, weil der Input-Operator alle Whitespaces als Eingabeende betrachtet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123553</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 25 Sep 2011 17:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 20:27:12 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<blockquote>
<p>Ist das erklärbar oder handelt es sich hier tatsächlich um einen &quot;Bug&quot;?</p>
</blockquote>
<p>Nein, das ist dann ganz normal. Oben hast du eine ganz andere Datei gepostet, der Einlesevorgang den ich dir geschreiben habe passt zu deren Format, nicht zu dem neuen. Verstehe was du tust und schreib nicht blind ab!</p>
</blockquote>
<p>Du hast natürlich Recht, aber erstmal eine Referenz finden, die solch ein Konstrukt erklärt... In meinen Büchern steht zu deiner (sehr gut funktionierenden) Methode nichts, in meinen Videotutorials auch nicht und auch über Google habe ich nichts vergleichbares gefunden. Ich finde immer nur Beispiele vor, in denen ein Char-Array gefüllt wird oder ein einzelner String ausgelesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123596</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Sun, 25 Sep 2011 20:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 20:43:33 GMT]]></title><description><![CDATA[<p>thuering schrieb:</p>
<blockquote>
<p>[...] Videotutorials [...]</p>
</blockquote>
<p><strong>NICHT (!!)</strong> ansehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123600</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 25 Sep 2011 20:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Sun, 25 Sep 2011 20:44:57 GMT]]></title><description><![CDATA[<p>Das Geheimnis ist, dass sämtliche Eingaben (und ausgaben übrigens auch) auf Streams den Stream selbst zurückgeben. Dadurch kann man überhaupt Konstrukte in der Form <code>cout &lt;&lt; a &lt;&lt; b &lt;&lt; c;</code> bzw. <code>cin &gt;&gt; a &gt;&gt; b &gt;&gt; c;</code> schreiben. Das ist aber nicht auf die Operatoren &gt;&gt; und &lt;&lt; beschränkt, sondern funktioniert auch hervorragend mit getline.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123601</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 25 Sep 2011 20:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Mon, 26 Sep 2011 19:18:51 GMT]]></title><description><![CDATA[<p>Weitere Frage zu dem Thema:<br />
Wie lese ich eine bestimmte Zeile (anhand Zeilennummer) aus?<br />
Soll ich mir da eine for-Schleife basteln, die alle Überflüssigen Lines in einen Dummy-String schreibt, um dann an der richtigen Adresse zu lesen?<br />
Oder gibts da andere tolle Lösungen?</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>thuering schrieb:</p>
<blockquote>
<p>[...] Videotutorials [...]</p>
</blockquote>
<p><strong>NICHT (!!)</strong> ansehen.</p>
</blockquote>
<p>OK. Auch nicht die teuer gekauften von Video2Brain oder Galileo? <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/2124047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2124047</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Mon, 26 Sep 2011 19:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to string aus Datei wird bei cout verschluckt &#x2F; überschrieben on Mon, 26 Sep 2011 19:22:41 GMT]]></title><description><![CDATA[<p>Gezielt eine bestimmte Zeile anzusprechen geht nur, wenn du vorher schonmal die komplette Datei eingelesen hast (immer abwechselnd per getline() einlesen und per seekg() die Position mitschreiben - später kannst du dann per tellg() dorthin zurückspringen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2124050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2124050</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 26 Sep 2011 19:22:41 GMT</pubDate></item></channel></rss>