<?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[Einlesen, stoppen und Einlesen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe in einer Textdatei Daten in folgendem Format:<br />
unsigned int N: unsigned int X<br />
N &amp; X --&gt; Zahlen im Wertebereich von unsigned int.<br />
Die Dateien auszulesen ist kein Problem.<br />
Aber ich möchte N und X in 2 seperaten Variablen speichern.<br />
Ich habe mich schon informiert, und herausgefunden,<br />
dass es zumindest möglich ist, bis zu einem bestimmten<br />
Zeichen zu lesen. Wie kann ich denn alles einlesen, bis ein &quot;:&quot; kommt,<br />
dann das eingelesene in einer Variable speichern und anscließend von dort aus [nach dem : ] weiterlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316840/einlesen-stoppen-und-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 17:15:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316840.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 May 2013 12:37:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:37:25 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe in einer Textdatei Daten in folgendem Format:<br />
unsigned int N: unsigned int X<br />
N &amp; X --&gt; Zahlen im Wertebereich von unsigned int.<br />
Die Dateien auszulesen ist kein Problem.<br />
Aber ich möchte N und X in 2 seperaten Variablen speichern.<br />
Ich habe mich schon informiert, und herausgefunden,<br />
dass es zumindest möglich ist, bis zu einem bestimmten<br />
Zeichen zu lesen. Wie kann ich denn alles einlesen, bis ein &quot;:&quot; kommt,<br />
dann das eingelesene in einer Variable speichern und anscließend von dort aus [nach dem : ] weiterlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324242</guid><dc:creator><![CDATA[Mapper]]></dc:creator><pubDate>Sat, 18 May 2013 12:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:45:40 GMT]]></title><description><![CDATA[<pre><code>unsigned int val1, val2;
while (file &gt;&gt; val1 &amp;&amp; file.get() == ':' &amp;&amp; file &gt;&gt; val2)
{
    std::cout &lt;&lt; val1 &lt;&lt; ' ' &lt;&lt; val2 &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2324243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324243</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 18 May 2013 12:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:51:05 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a>: Was ist mit <code>&quot;1 : 2&quot;</code> (beachte das Leerzeichen)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324247</guid><dc:creator><![CDATA[Satan]]></dc:creator><pubDate>Sat, 18 May 2013 12:51:05 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:54:44 GMT]]></title><description><![CDATA[<p>Habe ich richtig verstanden, dein Format ist</p>
<p><em>N</em> : <em>X</em><br />
<em>N</em> : <em>X</em><br />
...</p>
<p>?<br />
In dem Fall ist es ganz einfach:<br />
Beide Datenreihen in bspw. einer std::map&lt;unsigned, unsigned&gt; oder einem std::vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; (oder gar einfach einem vector, wo N den Index von X darstellt) speichern.<br />
Das Einlesen sähe dann so aus - die C++-Iostreams machen das schon ordentlich:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;utility&gt;

template&lt;char C&gt;
class Char
{
    friend std::istream&amp; operator&gt;&gt;( std::istream&amp; is, Char const&amp; c )
    {
        if( std::istream::traits_type::to_char_type(is.get()) != C )
            is.setstate( std::ios_base::failbit );

        return is;
    }
};

int main()
{
    std::vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; mData;

    std::ifstream stream(&quot;Data.txt&quot;);

    unsigned a, b;
    while( stream &gt;&gt; a &gt;&gt; Char&lt;':'&gt;() &gt;&gt; b )
        mData.push_back({a, b});
}
</code></pre>
<p>Edit: Mist, Nathan war schneller... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2324248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324248</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 12:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:54:28 GMT]]></title><description><![CDATA[<p>Satan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a>: Was ist mit <code>&quot;1 : 2&quot;</code> (beachte das Leerzeichen)?</p>
</blockquote>
<p>Die Leerzeichen werden hier vom intern erzeugten <code>std::istream::sentry</code> Objekt bei allen formatierten und unformatierten Extraktionen entfernt - solange dass <code>skipws</code> Flag gesetzt ist (was es standardmäßig ist).<br />
Kurz: Die werden ignoriert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324249</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 12:54:28 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:56:44 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>die C++-Iostreams machen das schon ordentlich</p>
</blockquote>
<p>Jetzt mach bitte noch den Check, dass jede Zeile vom Typ &quot;&lt;Leerzeichen&gt;&lt;Zahl&gt;&lt;Leerzeichen&gt;:&lt;Leerzeichen&gt;&lt;Zahl&gt;&lt;Leerzeichen&gt;&quot; sein muss, also insb. &quot;1\n:2&quot; nicht erlaubt wird.</p>
<p>Sone schrieb:</p>
<blockquote>
<p>Satan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a>: Was ist mit <code>&quot;1 : 2&quot;</code> (beachte das Leerzeichen)?</p>
</blockquote>
<p>Die Leerzeichen werden hier vom intern erzeugten <code>std::istream::sentry</code> Objekt bei allen formatierten und unformatierten Extraktionen entfernt - solange dass <code>skipws</code> Flag gesetzt ist (was es standardmäßig ist).<br />
Kurz: Die werden ignoriert.</p>
</blockquote>
<p>Nur schade, dass das sentry bei istream.get() auf noskipws gesetzt wird.<br />
Kurz: Die werden ausgelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324251</guid><dc:creator><![CDATA[Satan]]></dc:creator><pubDate>Sat, 18 May 2013 12:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:58:29 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Satan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a>: Was ist mit <code>&quot;1 : 2&quot;</code> (beachte das Leerzeichen)?</p>
</blockquote>
<p>Die Leerzeichen werden hier vom intern erzeugten <code>std::istream::sentry</code> Objekt bei allen formatierten und unformatierten Extraktionen entfernt - solange dass <code>skipws</code> Flag gesetzt ist (was es standardmäßig ist).<br />
Kurz: Die werden ignoriert.</p>
</blockquote>
<p>Nö</p>
<pre><code>int main()
{
	string test( &quot;1: 2&quot; );

	istringstream file( test );

	unsigned int val1, val2;

	while (file &gt;&gt; val1 &amp;&amp; file.get() == ':' &amp;&amp; file &gt;&gt; val2)
	{
		std::cout &lt;&lt; val1 &lt;&lt; ' ' &lt;&lt; val2 &lt;&lt; '\n';
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2324252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324252</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sat, 18 May 2013 12:58:29 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 12:59:49 GMT]]></title><description><![CDATA[<p>@out: Schwer von Begriff? Nimm bitte mal <code>string test( &quot;1 :2&quot; );</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324253</guid><dc:creator><![CDATA[Satan]]></dc:creator><pubDate>Sat, 18 May 2013 12:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 13:05:41 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<pre><code>if( std::istream::traits_type::to_char_type(is.get()) != C )
</code></pre>
</blockquote>
<p>Wieso muss bei dir eigentlich alles immer so kompliziert aussehen?</p>
<p>Satan schrieb:</p>
<blockquote>
<p>@out: Schwer von Begriff? Nimm bitte mal <code>string test( &quot;1 :2&quot; );</code></p>
</blockquote>
<p>Was damit? Das geht nicht, hab ich doch gesagt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324254</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sat, 18 May 2013 13:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 13:08:20 GMT]]></title><description><![CDATA[<p>Danke [an alle, insbesondere Nathan].<br />
Eigentlich habe ich mich verschrieben beim Format:<br />
statt N: X meine ich N:X, ist aber ganz egal.<br />
Container etc.. habe ich noch nicht kennengelernt, kommt aber bald.<br />
Jetzt habe ich mal Verständnisfragen:</p>
<pre><code>unsigned int val1, val2;
while (file &gt;&gt; val1 &amp;&amp; file.get() == ':' &amp;&amp; file &gt;&gt; val2)
{
    std::cout &lt;&lt; val1 &lt;&lt; ' ' &lt;&lt; val2 &lt;&lt; '\n';
}
</code></pre>
<p>Im Schleifenkopf von While kommt nur ne Bedingung,<br />
ich versteht nicht was die Bedingung prüft:</p>
<pre><code>while (file &gt;&gt; val1 &amp;&amp; file.get() == ':' &amp;&amp; file &gt;&gt; val2)
</code></pre>
<p>&quot;&gt;&gt;&quot; ist der &quot;rechtsverschiebungsoperator&quot;, der den linken operanden um den wert vom rechten operanden nach rechts im RAM verschiebt?<br />
und</p>
<pre><code>file.get() == ':'
</code></pre>
<p>prüft, ob mein ifstream-Objekt ein : eingelesen hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324256</guid><dc:creator><![CDATA[Mapper]]></dc:creator><pubDate>Sat, 18 May 2013 13:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 13:08:52 GMT]]></title><description><![CDATA[<p>@out: Sorry, hab nicht richtig gelesen.</p>
<p>Btw,</p>
<pre><code class="language-cpp">if( std::istream::traits_type::to_char_type(is.get()) != C )
</code></pre>
<p>ist völlig verkehrt. Man müsste C zu einem int_type promoten und dann eq_int_type aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324257</guid><dc:creator><![CDATA[Satan]]></dc:creator><pubDate>Sat, 18 May 2013 13:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 13:21:33 GMT]]></title><description><![CDATA[<p>Satan schrieb:</p>
<blockquote>
<p>@out: Sorry, hab nicht richtig gelesen.</p>
</blockquote>
<p>Ok (sollte für sone sein, damit er es kopieren kann und sieht, dass es nicht geht)</p>
<pre><code>file &gt;&gt; val1
</code></pre>
<p>Nein, mit &quot;rechtschieben&quot; hat das hier nichts zu tun. Das hier ist der &quot;extraction operator&quot;. Hierbei wird eine Ganzzahl eingelesen und sofort darauf wird geprüft, ob das einlesen erfolgreich war (2 Fliegen mit einer Klatsche schlagen). Dieser Operator verwirft standardmäßig Whitespaces.</p>
<pre><code>file.get()
</code></pre>
<p>Liest einfach das nächste im Stream stehende Zeichen. (z.B. Leerzeichen oder Doppelpunkt, je nachdem, was eben das nächste Zeichen ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324259</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sat, 18 May 2013 13:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 13:26:49 GMT]]></title><description><![CDATA[<p>Satan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29873">@Nathan</a>: Was ist mit <code>&quot;1 : 2&quot;</code> (beachte das Leerzeichen)?</p>
</blockquote>
<p>Das Format war N:X, wie der TE später korrigierte.<br />
Bei einem Format N:X erwarte ich auch nur Zahl, Zeichen ':', Zahl. Notfalls schiebt man noch ws zwischen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324261</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 18 May 2013 13:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 14:31:09 GMT]]></title><description><![CDATA[<p>Satan schrieb:</p>
<blockquote>
<p>Nur schade, dass das sentry bei istream.get() auf noskipws gesetzt wird.<br />
Kurz: Die werden ausgelesen.</p>
</blockquote>
<p>Na jut. Stimmt, das hätte ich wissen müssen - ist schließlich unformatiert. Hatte in Erinnerung dass es eben erst das nächste &quot;signifikante&quot; Zeichen ausliest.</p>
<p>Ich weiß gar nicht, wieso ich überhaupt Traits benutzt hab'. Hab beim schreiben noch gedacht, ich hab den char-Typ generisch gemacht - hab ich gar nicht... (?)<br />
Daher etwas einfacher:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;utility&gt;
#include &lt;sstream&gt;

template&lt;char C&gt;
class Char
{
    friend std::istream&amp; operator&gt;&gt;( std::istream&amp; is, Char const&amp; c )
    {
        if( is.get() != C )
            is.setstate( std::ios_base::failbit );

        return is;
    }
};

int main()
{
    std::vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; mData;

    std::istringstream stream(&quot;4 : 5\n&quot;
                              &quot;78:   9&quot;);

    unsigned a, b;
    while( stream &gt;&gt; a &gt;&gt; std::ws &gt;&gt; Char&lt;':'&gt;() &gt;&gt; b )
        mData.push_back({a, b});

    for( auto const&amp; p : mData )
        std::cout &lt;&lt; p.first &lt;&lt; ':' &lt;&lt; p.second &lt;&lt; '\n';
}
</code></pre>
<p>Soll das Format tatsächlich so akribisch genau geparst werden, muss man halt nur die Leerzeichen entfernen.<br />
Das ginge so:</p>
<pre><code>std::istream&amp; spaces( std::istream&amp; is )
{
    std::istream::sentry s(is, true);
    if( s )
        while( is.rdbuf()-&gt;sgetc() == ' ' )
            is.rdbuf()-&gt;sbumpc();

    return is;
}

// ....
    unsigned a, b;
    while( stream &gt;&gt; std::noskipws &gt;&gt; a &gt;&gt; spaces &gt;&gt; Char&lt;':'&gt;() &gt;&gt; spaces &gt;&gt; std::noskipws &gt;&gt;  b )
    {
        mData.push_back({a, b});
        stream &gt;&gt; Char&lt;'\n'&gt;();
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2324269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324269</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 14:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 14:20:40 GMT]]></title><description><![CDATA[<p>Satan schrieb:</p>
<blockquote>
<p>Btw,</p>
<pre><code class="language-cpp">if( std::istream::traits_type::to_char_type(is.get()) != C )
</code></pre>
<p>ist völlig verkehrt. Man müsste C zu einem int_type promoten und dann eq_int_type aufrufen.</p>
</blockquote>
<p>Ne, es ist - wie ich bei einem überraschten zweiten Blick sah - überflüssiger Blödsinn. Man kann natürlich direkt vergleichen. Ich dachte wie gesagt, ich hätte Char vom Zeichentyp unabhängig gemacht, da wären Traits vielleicht notwendig gewesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324270</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 14:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 14:37:03 GMT]]></title><description><![CDATA[<p>Ich habe mich wieder informiert, doch nichts verstädnlich/nützliches gefunden.<br />
gibt es einen paramter bei getline, oder eine methode bei ifstream, die es mir erlaubt nur duie letzte zeile auszulesen.<br />
ich habe auch schon die zeilenanzahl ausgelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324272</guid><dc:creator><![CDATA[Mapper]]></dc:creator><pubDate>Sat, 18 May 2013 14:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 14:38:52 GMT]]></title><description><![CDATA[<p>Mapper schrieb:</p>
<blockquote>
<p>gibt es einen paramter bei getline, oder eine methode bei ifstream, die es mir erlaubt nur duie letzte zeile auszulesen.</p>
</blockquote>
<p>Wenn du die Zeilenzahl hast, und bis zur letzten Zeile vorrücken willst, dann nimm<a href="http://en.cppreference.com/w/cpp/io/basic_istream/ignore" rel="nofollow"> <code>istream::ignore</code> </a>.<br />
Von da wie gewohnt lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324273</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 14:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 15:44:54 GMT]]></title><description><![CDATA[<p>Ich habe hier mal einen ganz anderen Weg, um die letzte Zeile einer Datei zu lesen:</p>
<pre><code>int main()
{
	string test( &quot;abc\ndef\nghi\nhallo welt!&quot; );
	istringstream file( test );
	string last_line;

	file.seekg( 0, std::ios_base::end );
	file.unget();
	for( char c=0; file&gt;&gt;std::noskipws&gt;&gt;c &amp;&amp; c!='\n'; last_line.push_back(c) )
	{
		file.unget();
		file.unget();
	}
	std::reverse( last_line.begin(), last_line.end() );
	cout &lt;&lt; last_line &lt;&lt; '\n';
}
</code></pre>
<p>Was haltet ihr davon? Ist das ineffizient? Falls ja, was wäre ein effizienter Weg, die letzte Zeile zu lesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324281</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sat, 18 May 2013 15:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:33:29 GMT]]></title><description><![CDATA[<p>Ich hätte soetwas verwendet:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::istream file(std::cin.rdbuf());

    std::string last_line;
    while (std::getline(file, last_line))
        ;
    std::cout &lt;&lt; last_line;
}
</code></pre>
<p>Aber ich glaube, das ist zu banal. :p<br />
Außerdem ist outs Lösung effizienter.</p>
<p>Edit: Das reverse Lesen ist aber schon ein wenig unhandlich. Sone, schreib' mal nen streambuf der rückwärts liest. <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/2324283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324283</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 18 May 2013 16:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:51:52 GMT]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;

int main()
{
    std::istringstream file( &quot;abc\nbcd\nhallo welt!&quot; );

    file.seekg( 0, std::ios_base::end );

    char c;
    do c = file.rdbuf()-&gt;sungetc();
    while( c != '\n' &amp;&amp; c != std::char_traits&lt;char&gt;::eof() );

    std::string last_line;

    if( c == '\n' )
        last_line.assign( ++std::istreambuf_iterator&lt;char&gt;(file), std::istreambuf_iterator&lt;char&gt;() );

    std::cout &lt;&lt; last_line &lt;&lt; '\n';
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Edit:</p>
<p>Nathan schrieb:</p>
<blockquote>
<p>Sone, schreib' mal nen streambuf der rückwärts liest. <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>Ohne Witz, ich hab das nicht gelesen! Ich hab das gerade erst entdeckt! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2324285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324285</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 16:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:39:31 GMT]]></title><description><![CDATA[<p>Sowas wie getline magste nicht, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324287</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 18 May 2013 16:39:31 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:44:40 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Sowas wie getline magste nicht, oder?</p>
</blockquote>
<p>Ich?<br />
Doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324288</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 16:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:54:06 GMT]]></title><description><![CDATA[<p>Die Zeile ersetzen:</p>
<pre><code>if( c == '\n' )
        std::getline( file.ignore(), last_line, char(EOF) );
</code></pre>
<p>Edit: Zur Konformität nehm' ich mal EOF.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324289</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 16:54:06 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:49:25 GMT]]></title><description><![CDATA[<p>Genau das meinte ich.<br />
Hat das einen besonderen Grund warum du sungetc() verwendest anstatt ungetc des Streams?<br />
Edit: Und dein file.seekg() kannste durch ignore ersetzen, weniger zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324290</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 18 May 2013 16:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:52:09 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Edit: Und dein file.seekg() kannste durch ignore ersetzen, weniger zu schreiben.</p>
</blockquote>
<p>Wirklich. Ohne Witz. Hab ich gerade gemacht, da sehe ich deine Antwort.</p>
<p><code>ungetc</code> kannte ich nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Edit: Was für ein ungetc? <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/2324291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324291</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 16:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen, stoppen und Einlesen on Sat, 18 May 2013 16:55:09 GMT]]></title><description><![CDATA[<p>Klar kannte ich das noch nicht -<br />
das <strong>gibt</strong> es ja auch gar nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2324292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2324292</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 May 2013 16:55:09 GMT</pubDate></item></channel></rss>