<?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[Problem mit ifstream: tellg(), seekg(), getline]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe ein kleines Problem und ich denke, dass es mit einem kleinen Beispiel am besten zu erläutern ist:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

using namespace std;

int main()
{
    vector&lt;fstream::pos_type&gt; v;
    string s;

    ifstream ifs(&quot;c:\\test.txt&quot;, ios::binary);
    if(ifs)
    {
        v.push_back(ifs.tellg());
        while(getline(ifs, s))
        {
            v.push_back(ifs.tellg());
            cout &lt;&lt; s &lt;&lt; endl;
        }
        ifs.clear();

        cout &lt;&lt; endl;
        for(unsigned int i = 0; i &lt; v.size(); ++i)
        {
            ifs.seekg(v[i]);
            getline(ifs, s);
            cout &lt;&lt; s &lt;&lt; endl;
        }
        ifs.close();
    }
    else
        cerr &lt;&lt; &quot;err&quot; &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>Ich weiss, der Code macht keinen Sinn, aber wieso wird hier IMMER, egal welche Datei ich verwende, <strong>die letzte Zeile doppelt ausgegeben</strong>?</p>
<p>//Noch 3 Fragen<br />
Wieso funktioniert <em>tellg()</em> hier nur, wenn die Datei im Modus <em>ios::binary</em> geöffnet wird?<br />
Wozu benötigt man das <em>ifs.clear()</em>, ein Fehler tritt dort ja nicht auf?<br />
Ist <em>fstream::pos_type</em> hier der richtige Datentyp?</p>
<p><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>Compiler: GNU GCC (IDE: Code::Blocks)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236529/problem-mit-ifstream-tellg-seekg-getline</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 21:41:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236529.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Mar 2009 16:37:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit ifstream: tellg(), seekg(), getline on Mon, 16 Mar 2009 16:37:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe ein kleines Problem und ich denke, dass es mit einem kleinen Beispiel am besten zu erläutern ist:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

using namespace std;

int main()
{
    vector&lt;fstream::pos_type&gt; v;
    string s;

    ifstream ifs(&quot;c:\\test.txt&quot;, ios::binary);
    if(ifs)
    {
        v.push_back(ifs.tellg());
        while(getline(ifs, s))
        {
            v.push_back(ifs.tellg());
            cout &lt;&lt; s &lt;&lt; endl;
        }
        ifs.clear();

        cout &lt;&lt; endl;
        for(unsigned int i = 0; i &lt; v.size(); ++i)
        {
            ifs.seekg(v[i]);
            getline(ifs, s);
            cout &lt;&lt; s &lt;&lt; endl;
        }
        ifs.close();
    }
    else
        cerr &lt;&lt; &quot;err&quot; &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>Ich weiss, der Code macht keinen Sinn, aber wieso wird hier IMMER, egal welche Datei ich verwende, <strong>die letzte Zeile doppelt ausgegeben</strong>?</p>
<p>//Noch 3 Fragen<br />
Wieso funktioniert <em>tellg()</em> hier nur, wenn die Datei im Modus <em>ios::binary</em> geöffnet wird?<br />
Wozu benötigt man das <em>ifs.clear()</em>, ein Fehler tritt dort ja nicht auf?<br />
Ist <em>fstream::pos_type</em> hier der richtige Datentyp?</p>
<p><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>Compiler: GNU GCC (IDE: Code::Blocks)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680976</guid><dc:creator><![CDATA[anonym16]]></dc:creator><pubDate>Mon, 16 Mar 2009 16:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ifstream: tellg(), seekg(), getline on Mon, 16 Mar 2009 16:48:16 GMT]]></title><description><![CDATA[<p>anonym16 schrieb:</p>
<blockquote>
<p>Ich weiss, der Code macht keinen Sinn, aber wieso wird hier IMMER, egal welche Datei ich verwende, die letzte Zeile doppelt ausgegeben?</p>
</blockquote>
<p>Weil du zuviele Positionen speicherst. Die letzte Position, welche du speicherst, liegt gleich vor dem Ende des Files. In deiner For-Schleife wird nun dieser Wert gesetzt und probiert eine weitere Zeile zu lesen. Dies scheitert allerdings und in <code>s</code> steht immer noch die gleiche Zeile.</p>
<p>anonym16 schrieb:</p>
<blockquote>
<p>Wieso funktioniert tellg() hier nur, wenn die Datei im Modus ios::binary geöffnet wird?</p>
</blockquote>
<p>Das würde mich sehr überraschen. Bist du sicher mit dieser Behauptung? Wenn ja, Kompiler?</p>
<p>anonym16 schrieb:</p>
<blockquote>
<p>Wozu benötigt man das ifs.clear(), ein Fehler tritt dort ja nicht auf?</p>
</blockquote>
<p>Doch. Das Ende vom Stream wird erreicht, wodurch das eofbit gesetzt wird, was ein Fehler ist.</p>
<p>anonym16 schrieb:</p>
<blockquote>
<p>Ist fstream::pos_type hier der richtige Datentyp?</p>
</blockquote>
<p>Ja.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680985</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 16 Mar 2009 16:48:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ifstream: tellg(), seekg(), getline on Mon, 16 Mar 2009 17:01:51 GMT]]></title><description><![CDATA[<p>Danke, für dir Antworten. Das Problem mit den doppelten Zeilen habe ich nun gelöst. <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>Doch das Problem mit dem <em>ios::binary</em> besteht weiterhin.<br />
Ich habe eine ganz einfache Testdatei <em>test.txt</em>, die 4 Wörter enthält.<br />
Wenn ich das <em>ios::binary</em> wegnehme, wird nur die erste und die letzte Zeile ausgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680991</guid><dc:creator><![CDATA[anonym16]]></dc:creator><pubDate>Mon, 16 Mar 2009 17:01:51 GMT</pubDate></item></channel></rss>