<?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[Filepointer nach getline zurücksetzen]]></title><description><![CDATA[<p>Hallo Leute<br />
Kann mir jemand sagen, wo das problem bei folgendem Code liegt?:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstring&gt;
#include &lt;fstream&gt;

using namespace std;

int main()
{

    int a[5];

    ifstream fin(&quot;input.txt&quot;);

    char c[100];
    int lines = 0;

    while(fin.good())    //Zeilen zählen
    {
        fin.getline(c, 10);
        lines++;
    }

    fin.seekg(0, ios::beg);
    int b;
    fin &gt;&gt; b;

    cout &lt;&lt; b; 

    return 0;
}
</code></pre>
<p>&quot;input.txt&quot; ist eine Liste mit Zahlen.<br />
fin.seekg(0, ios::beg); scheint den filepointer nicht korrekt zurückzusetzen, weil fin &gt;&gt; b; nicht die erste Zahl in der Liste nach b schreibt.<br />
Komischerweise funktioniert aber dieser Code: (welcher abgesehen von der Schleife zum Zeilenzählen absolut identisch ist.</p>
<pre><code>int main()
{

    int a[5];

    ifstream fin(&quot;input.txt&quot;);

    char c[100];
    int lines = 0;

    fin.getline(c, 10);
fin.getline(c, 10);

    fin.seekg(0, ios::beg);
    int b;
    fin &gt;&gt; b;

    cout &lt;&lt; b; 

    return 0;
}
</code></pre>
<p>Kann mir das nicht erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319234/filepointer-nach-getline-zurücksetzen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 23:54:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319234.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Aug 2013 16:12:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 16:12:34 GMT]]></title><description><![CDATA[<p>Hallo Leute<br />
Kann mir jemand sagen, wo das problem bei folgendem Code liegt?:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstring&gt;
#include &lt;fstream&gt;

using namespace std;

int main()
{

    int a[5];

    ifstream fin(&quot;input.txt&quot;);

    char c[100];
    int lines = 0;

    while(fin.good())    //Zeilen zählen
    {
        fin.getline(c, 10);
        lines++;
    }

    fin.seekg(0, ios::beg);
    int b;
    fin &gt;&gt; b;

    cout &lt;&lt; b; 

    return 0;
}
</code></pre>
<p>&quot;input.txt&quot; ist eine Liste mit Zahlen.<br />
fin.seekg(0, ios::beg); scheint den filepointer nicht korrekt zurückzusetzen, weil fin &gt;&gt; b; nicht die erste Zahl in der Liste nach b schreibt.<br />
Komischerweise funktioniert aber dieser Code: (welcher abgesehen von der Schleife zum Zeilenzählen absolut identisch ist.</p>
<pre><code>int main()
{

    int a[5];

    ifstream fin(&quot;input.txt&quot;);

    char c[100];
    int lines = 0;

    fin.getline(c, 10);
fin.getline(c, 10);

    fin.seekg(0, ios::beg);
    int b;
    fin &gt;&gt; b;

    cout &lt;&lt; b; 

    return 0;
}
</code></pre>
<p>Kann mir das nicht erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345033</guid><dc:creator><![CDATA[kaenzign]]></dc:creator><pubDate>Sun, 11 Aug 2013 16:12:34 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 16:47:14 GMT]]></title><description><![CDATA[<p>Versuch mal zusaetzlich</p>
<pre><code class="language-cpp">fin.clear();
</code></pre>
<p>nach der Schleife. Das sollte den Fehlerzustand im fin Objekt zuruecksetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345038</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 11 Aug 2013 16:47:14 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 16:50:02 GMT]]></title><description><![CDATA[<p>Deine Schleife endet beim Einlesen von EOF, also wenn du am Ende der Datei angelangt bist. Das eofbit wird in deinem Stream gesetzt und ab da an sind weitere Operationen auf den Stream nicht mehr gesund. Daher sollte ein fin.clear() nach der Schleife ausreichen, um wieder sauber weiterzuarbeiten. Desweiteren folgendes dringend durchlesen: <a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=eof#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=eof#Answ</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345039</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Aug 2013 16:50:02 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 16:49:03 GMT]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstring&gt;
#include &lt;fstream&gt;

using namespace std;

int main()
{

    int a[5];

    ifstream fin(&quot;input.txt&quot;);

    char c[100];
    int lines = 0;

    while( fin.getline(c, 10) )    //Zeilen zählen
    {
        lines++;
    } // Wenn du aus der Schleife rauskommst, ist der Stream fin in einem schlechten Zustand. Alle Operationen, die du auf den Stream anwendest, schlagen dann fehl.

    fin.clear(); // Stream fin in den Zustand gut überführen.
    fin.seekg(0, ios::beg);
    int b;
    fin &gt;&gt; b;

    cout &lt;&lt; b;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2345040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345040</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 11 Aug 2013 16:49:03 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 16:59:10 GMT]]></title><description><![CDATA[<p>Anstatt eines char-Arrays solltest du in C++ std::string verwenden:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using std::string;

int main() 
{ 
  std::ifstream fin(&quot;input.txt&quot;); 

  string c;
  int lines = 0; 
  while( getline(fin,c) )
  { 
      lines++; 
  }
  fin.clear();

  /* Der Rest des Codes */
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2345042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345042</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 11 Aug 2013 16:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 17:54:11 GMT]]></title><description><![CDATA[<p>Außerdem könntest du die Zeilen in einem std::vector ablegen und dann std::vector.size() benutzen, um die Anzahl der Zeilen zu ermitteln. Mit der Methode brauchst du dann auch nur die erste Zeile aus dem std::vector nehmen, anstatt wieder die Datei von vorne zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345051</guid><dc:creator><![CDATA[Schamote]]></dc:creator><pubDate>Sun, 11 Aug 2013 17:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 18:06:15 GMT]]></title><description><![CDATA[<p>Schamote schrieb:</p>
<blockquote>
<p>Außerdem könntest du die Zeilen in einem std::vector ablegen und dann std::vector.size() benutzen, um die Anzahl der Zeilen zu ermitteln. Mit der Methode brauchst du dann auch nur die erste Zeile aus dem std::vector nehmen, anstatt wieder die Datei von vorne zu lesen.</p>
</blockquote>
<p>Nein, das mit dem std::vector ist nun wirklich nicht sinnvoll. Verbraucht bloss unnoetig Speicher.<br />
Um sich die erste Zeile zu merken und die Anzahl Zeilen zu zaehlen muss man nicht die gesamte Datei in einem std::vector speichern:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using std::cout;
using std::endl;
using std::string;

int main() 
{ 
  std::ifstream fin(&quot;input.txt&quot;); 

  string firstline;
  getline(fin,firstline);

  string s;
  int nlines = 1;
  while( getline(fin,s) )
    ++nlines;

  cout &lt;&lt; &quot;Erste Zeile: &quot; &lt;&lt; firstline &lt;&lt; endl;
  cout &lt;&lt; &quot;Anzahl Zeilen: &quot; &lt;&lt; nlines &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2345053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345053</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 11 Aug 2013 18:06:15 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 18:16:07 GMT]]></title><description><![CDATA[<p>Apropos Speicherverbrauch:</p>
<pre><code class="language-cpp">std::ifstream fin(&quot;input.txt&quot;);
std::cout &lt;&lt; &quot;Anzahl Zeilen: &quot;
          &lt;&lt; std::count(std::istreambuf_iterator&lt;char&gt;(fin),
                        std::istreambuf_iterator&lt;char&gt;(), '\n') &lt;&lt; '\n';
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2345057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345057</guid><dc:creator><![CDATA[speicherer]]></dc:creator><pubDate>Sun, 11 Aug 2013 18:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 18:21:49 GMT]]></title><description><![CDATA[<p>Eleganter finde ich ja das hier</p>
<pre><code class="language-cpp">std::ifstream inFile(&quot;file&quot;); 
  std::count(std::istreambuf_iterator&lt;char&gt;(inFile), 
             std::istreambuf_iterator&lt;char&gt;(), '\n');
</code></pre>
<p>Wenn die letzte Zeile nicht mit '\n' abgeschlossen ist, wird sie nicht mitgezählt.</p>
<p>siehe <a href="http://stackoverflow.com/questions/3072795/how-to-count-lines-of-a-file-in-c/3072840#3072840" rel="nofollow">http://stackoverflow.com/questions/3072795/how-to-count-lines-of-a-file-in-c/3072840#3072840</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345059</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 11 Aug 2013 18:21:49 GMT</pubDate></item><item><title><![CDATA[Reply to Filepointer nach getline zurücksetzen on Sun, 11 Aug 2013 18:28:24 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Schamote schrieb:</p>
<blockquote>
<p>Außerdem könntest du die Zeilen in einem std::vector ablegen und dann std::vector.size() benutzen, um die Anzahl der Zeilen zu ermitteln. Mit der Methode brauchst du dann auch nur die erste Zeile aus dem std::vector nehmen, anstatt wieder die Datei von vorne zu lesen.</p>
</blockquote>
<p>Nein, das mit dem std::vector ist nun wirklich nicht sinnvoll. Verbraucht bloss unnoetig Speicher.<br />
Um sich die erste Zeile zu merken und die Anzahl Zeilen zu zaehlen muss man nicht die gesamte Datei in einem std::vector speichern:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
  
using std::cout;
using std::endl;
using std::string;
  
int main() 
{ 
  std::ifstream fin(&quot;input.txt&quot;); 

  string firstline;
  getline(fin,firstline);

  string s;
  int nlines = 1;
  while( getline(fin,s) )
    ++nlines;

  cout &lt;&lt; &quot;Erste Zeile: &quot; &lt;&lt; firstline &lt;&lt; endl;
  cout &lt;&lt; &quot;Anzahl Zeilen: &quot; &lt;&lt; nlines &lt;&lt; endl;
}
</code></pre>
</blockquote>
<p>Das habe ich mal so pauschal gesagt, wenn er die Zeilenzahl wissen möchte, kann man durchaus damit rechnen, dass er die Datei noch über die erste Zeile hinaus verwenden möchte <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>Falls das nicht der Fall ist, hast du natürlich recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345061</guid><dc:creator><![CDATA[Schamote]]></dc:creator><pubDate>Sun, 11 Aug 2013 18:28:24 GMT</pubDate></item></channel></rss>