<?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[ifstream | letzter Buchstabe doppelt]]></title><description><![CDATA[<p>Ich möchte aus der &quot;.txt&quot; Datei &quot;test.text&quot; den Inhalt auslesen. Inhalt = Horst.<br />
Ich hätte das dann folgendermaßen gemacht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main()
{
    char a;
    ifstream File;
    File.open(&quot;D:/test.txt&quot;, ios::in);
    while(!File.eof())
    {
        File &gt;&gt; a;
        cout &lt;&lt; a;
    }
    cout &lt;&lt; &quot;\n&quot;;

    return 0;
}
</code></pre>
<p>Mein Problem, es wird zwar was ausgelesen, aber es wird &quot;Horstt&quot; ausgelsen, was soll das 2te &quot;t&quot; da? Irgendwas mach ich noch n bissel falsch irgendwie....</p>
<p>MfG<br />
Stromberg</p>
<p>PS: Wenn wir schon mal dabei sind, was ich bis jetzt immer noch nicht so ganz gecheckt habe, warum ist &quot;ofstream&quot; eigentlich für auf die Festplatte schreiben, und &quot;ifstream&quot; für von der Festplatte lesen??? Also ich mein jetzt vom Namen her, weil es würde doch viel mehr passen wenn &quot;ofstream&quot; fürs lesen zuständig wäre (output -&gt; raus), und &quot;ifstream&quot; fürs schreiben (input -&gt; rein)....oder hat das nen tieferen Hintergrund den ich noch nicht verstehe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201501/ifstream-letzter-buchstabe-doppelt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 00:43:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201501.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Dec 2007 22:42:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 22:42:34 GMT]]></title><description><![CDATA[<p>Ich möchte aus der &quot;.txt&quot; Datei &quot;test.text&quot; den Inhalt auslesen. Inhalt = Horst.<br />
Ich hätte das dann folgendermaßen gemacht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main()
{
    char a;
    ifstream File;
    File.open(&quot;D:/test.txt&quot;, ios::in);
    while(!File.eof())
    {
        File &gt;&gt; a;
        cout &lt;&lt; a;
    }
    cout &lt;&lt; &quot;\n&quot;;

    return 0;
}
</code></pre>
<p>Mein Problem, es wird zwar was ausgelesen, aber es wird &quot;Horstt&quot; ausgelsen, was soll das 2te &quot;t&quot; da? Irgendwas mach ich noch n bissel falsch irgendwie....</p>
<p>MfG<br />
Stromberg</p>
<p>PS: Wenn wir schon mal dabei sind, was ich bis jetzt immer noch nicht so ganz gecheckt habe, warum ist &quot;ofstream&quot; eigentlich für auf die Festplatte schreiben, und &quot;ifstream&quot; für von der Festplatte lesen??? Also ich mein jetzt vom Namen her, weil es würde doch viel mehr passen wenn &quot;ofstream&quot; fürs lesen zuständig wäre (output -&gt; raus), und &quot;ifstream&quot; fürs schreiben (input -&gt; rein)....oder hat das nen tieferen Hintergrund den ich noch nicht verstehe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428320</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 30 Dec 2007 22:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 23:04:11 GMT]]></title><description><![CDATA[<p>Hi Stromberg,</p>
<p>afaik wird das eofbit erst gesetzt, wenn das Ende der Datei erreicht wurde.<br />
Du fragst also:<br />
Ist das eof flag gesetzt und ließt dann den nächsten Buchstaben.<br />
Du mußt aber fragen, ob die Leseoperation erfolgreich war, bevor du sie auswertest.<br />
Du hast jetzt beispielsweise das letzte Zeichen gelesen.<br />
Dann merkt er, dass er das Zeichen noch lesen konnte und setzt das flag<br />
folglich noch nicht. Beim nächsten Versuch sagt er dann, den Buchstaben<br />
kann ich nicht mehr lesen -&gt; eof.<br />
Das bit ist ein feedback auf die letzte Leseoperation und keine Aussage<br />
über die nächste Leseoperation.</p>
<p>wegen der Namensgebung ifstream und ofstream:<br />
Sieh es aus der Sicht deines Programmes. Ins Programm rein, aus dem Programm raus.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428326</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 30 Dec 2007 23:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 23:13:32 GMT]]></title><description><![CDATA[<p>Mh, verstanden hab ich das Problem jetzt schon, er reagiert nicht darauf, dass er den letzten Bcuhstaben gelesen hat, sondern er reagiert darauf wenn er merkt das kein Buchstabe mehr da ist, und es halt leer ist.<br />
Aber wie ich das Problem lösen kann hab ich nicht so ganz verstanden?<br />
Ich kann natürlich jetzt bei jedem Wort immer den letzten Buchstaben abschneiden, aber ob das eine so glorreiche Idee ist bezweifle ich oder? Da gibts doch sicher was besseres....<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428331</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 30 Dec 2007 23:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 23:22:27 GMT]]></title><description><![CDATA[<p>Nach dem Lesen mußt du abfragen, ob du die Daten noch verarbeiten kannst:</p>
<pre><code class="language-cpp">while(!File.eof())
{
    File &gt;&gt; a;
    if(!File.eof())
         cout &lt;&lt; a;
}
</code></pre>
<p>oder eleganter:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main()
{
    char a;
    ifstream File;
    File.open(&quot;D:/test.txt&quot;, ios::in);
    File &gt;&gt; a;
    while(!File.eof())
    {
        cout &lt;&lt; a;
        File &gt;&gt; a;
    }
    cout &lt;&lt; &quot;\n&quot;;

    return 0;
}
</code></pre>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428335</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 30 Dec 2007 23:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 23:28:28 GMT]]></title><description><![CDATA[<p>Den Status des Streams kannst du einfach mit dem impliziten (void <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="😉"
    /> Operator testen:</p>
<pre><code class="language-cpp">while(File) // &lt;- istream::operator void*()
{
  File &gt;&gt; c;
}
</code></pre>
<p>Die Abfrage auf eof() ist nicht so gut, da es noch andere Fehlerzustände gibt, welche dann nicht getestet würden und du eine Endlosschleife hättest...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428338</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sun, 30 Dec 2007 23:28:28 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 23:41:51 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Den Status des Streams kannst du einfach mit dem impliziten (void <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="😉"
    /> Operator testen:</p>
<pre><code class="language-cpp">while(File) // &lt;- istream::operator void*()
{
  File &gt;&gt; c;
}
</code></pre>
<p>Die Abfrage auf eof() ist nicht so gut, da es noch andere Fehlerzustände gibt, welche dann nicht getestet würden und du eine Endlosschleife hättest...</p>
</blockquote>
<p>Cool...</p>
<p>Die Abfrage mit dem impliziten (void <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="😉"
    /> operator kannte ich auch noch nicht.<br />
Dass andere Fehler existieren können (failbit, badbit), war mir klar.<br />
Ehrlich gesagt hab ich diese aber bisher immer ignoriert ^^, da sie sehr selten<br />
auftreten und man ja schreibfaul ist <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="🙂"
    /><br />
EDIT: btw: Ich hätte ja schon immer einfach good() abfragen können.</p>
<p>Danke für den interessanten Hinweis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428341</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 30 Dec 2007 23:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 23:40:39 GMT]]></title><description><![CDATA[<p>Dann ists so wohl am besten:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main()
{
    char a;
    ifstream File;
    File.open(&quot;D:/test.txt&quot;, ios::in);
    File &gt;&gt; a; //Nur die Zeile hier finde ich noch irgendwie hässlich, gibts keine Möglichkeit dass man alles in die Schleife bekommt?
    while(File)
    {
        cout &lt;&lt; a;
        File &gt;&gt; a;
    }
    cout &lt;&lt; &quot;\n&quot;;

    return 0;
}
</code></pre>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428346</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 30 Dec 2007 23:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Sun, 30 Dec 2007 23:56:59 GMT]]></title><description><![CDATA[<p>Hallo Stromberg,</p>
<p>es gibt immer mehrere Möglichkeiten.</p>
<pre><code class="language-cpp">int main() 
{ 
    char a; 
    ifstream File; 
    File.open(&quot;D:/test.txt&quot;, ios::in);
    while(true) 
    { 
        File &gt;&gt; a; 
        if(!File)
            break;
        cout &lt;&lt; a; 
    } 
    cout &lt;&lt; &quot;\n&quot;; 

    return 0; 
}
</code></pre>
<p>Diese Variante mit break finde ich persönlich nicht schön.<br />
Oder wie gesagt die doppelte Überprüfung (bei Bedarf mit Status-Speicherung)</p>
<pre><code class="language-cpp">int main() 
{ 
    char a; 
    ifstream File; 
    File.open(&quot;D:/test.txt&quot;, ios::in);
    bool state = true; 
    while(state) 
    { 
        File &gt;&gt; a;
        state = File;
        if(state)
            cout &lt;&lt; a; 
    } 
    cout &lt;&lt; &quot;\n&quot;; 
    return 0; 
}
</code></pre>
<p>Welche Variante man bevorzugt ist natürlich Geschmacksache.<br />
Ich denke allerdings nicht, dass du an zwei Leseoperationen, zwei eof-Prüfungen<br />
oder einem break vorbeikommst.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428355</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 30 Dec 2007 23:56:59 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Mon, 31 Dec 2007 00:26:45 GMT]]></title><description><![CDATA[<p>Also noch mal in Kürze.<br />
Es reicht folgende Schleife:</p>
<pre><code class="language-cpp">while(File &gt;&gt; c) // &lt;- istream::operator void*() 
{ 
  cout &lt;&lt; c;
}
</code></pre>
<p>Da jedoch der &gt;&gt;-Operator standardmäßig Leerzeichen überliest, sollte man dann doch besser get() benutzen (um die Zeichen 1:1 zu kopieren):</p>
<pre><code class="language-cpp">while(c = File.get(), File)
{ 
  cout &lt;&lt; c;
}
</code></pre>
<p>Alternativ kann man auch zeilenweise mit getline(...) in einen std::string lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428368</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 31 Dec 2007 00:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Mon, 31 Dec 2007 11:13:32 GMT]]></title><description><![CDATA[<p>Und für die, die das alles zu blöde finden:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

int main()
{
    std::ifstream file_stream(&quot;D:\\test.txt&quot;);
    if (!file_stream) { std::cerr &lt;&lt; &quot;FEHLER: Datei konnte nicht geöffnet werden!&quot; &lt;&lt; std::endl; return 1; }
    std::copy(std::istream_iterator&lt;char&gt;(file_stream), std::istream_iterator&lt;char&gt;(), std::ostream_iterator&lt;char&gt;(std::cout, &quot;&quot;);
}
</code></pre>
<p><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/1428471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428471</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 31 Dec 2007 11:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Mon, 31 Dec 2007 11:26:12 GMT]]></title><description><![CDATA[<p>warum endl? <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/1428479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428479</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Mon, 31 Dec 2007 11:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream | letzter Buchstabe doppelt on Mon, 31 Dec 2007 11:35:08 GMT]]></title><description><![CDATA[<p>rdbuf()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428489</guid><dc:creator><![CDATA[Wiss0r]]></dc:creator><pubDate>Mon, 31 Dec 2007 11:35:08 GMT</pubDate></item></channel></rss>