<?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 und fail bit]]></title><description><![CDATA[<p>hallo,<br />
ich habe eine Frage, warum wird hier sowohl das fail als auch das eof bit gesetzt:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
using namespace std;
int main(int argc,char* argv[])
{
	ifstream file(argv[1]);
	string line;

	cout &lt;&lt; &quot;fail=&quot; &lt;&lt; file.fail() &lt;&lt; endl;
	cout &lt;&lt; &quot;eof=&quot; &lt;&lt; file.eof() &lt;&lt; endl;
	cout &lt;&lt; &quot;bad=&quot; &lt;&lt; file.bad() &lt;&lt; endl;

	cout &lt;&lt; &quot;errno=&quot; &lt;&lt; errno &lt;&lt; &quot; (&quot; &lt;&lt; strerror(errno) &lt;&lt; &quot;)&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;

	while(getline(file,line))
		cout &lt;&lt; line &lt;&lt; endl;

	cout &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;fail=&quot; &lt;&lt; file.fail() &lt;&lt; endl;
	cout &lt;&lt; &quot;eof=&quot; &lt;&lt; file.eof() &lt;&lt; endl;
	cout &lt;&lt; &quot;bad=&quot; &lt;&lt; file.bad() &lt;&lt; endl;

	cout &lt;&lt; &quot;errno=&quot; &lt;&lt; errno &lt;&lt; &quot; (&quot; &lt;&lt; strerror(errno) &lt;&lt; &quot;)&quot; &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>Sollte nicht nur das eof bit gesetzt werden?</p>
<p>Die Datei ist vorhanden und lesbar (wird auch richtig ausgegeben).</p>
<p>Bei der ersten Ausgabe ist keins der bits gesetzt. Bei der zweiten Ausgabe sind eof und fail gesetzt.</p>
<p>Das ganze hab ich unter Windows (minGW mit gcc Version 3.4.2) und MacOS (gcc Version 4.0.1) mit gleichem Ergnis getestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202965/ifstream-und-fail-bit</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 08:56:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202965.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jan 2008 11:29:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream und fail bit on Thu, 17 Jan 2008 11:30:45 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich habe eine Frage, warum wird hier sowohl das fail als auch das eof bit gesetzt:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
using namespace std;
int main(int argc,char* argv[])
{
	ifstream file(argv[1]);
	string line;

	cout &lt;&lt; &quot;fail=&quot; &lt;&lt; file.fail() &lt;&lt; endl;
	cout &lt;&lt; &quot;eof=&quot; &lt;&lt; file.eof() &lt;&lt; endl;
	cout &lt;&lt; &quot;bad=&quot; &lt;&lt; file.bad() &lt;&lt; endl;

	cout &lt;&lt; &quot;errno=&quot; &lt;&lt; errno &lt;&lt; &quot; (&quot; &lt;&lt; strerror(errno) &lt;&lt; &quot;)&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;

	while(getline(file,line))
		cout &lt;&lt; line &lt;&lt; endl;

	cout &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;fail=&quot; &lt;&lt; file.fail() &lt;&lt; endl;
	cout &lt;&lt; &quot;eof=&quot; &lt;&lt; file.eof() &lt;&lt; endl;
	cout &lt;&lt; &quot;bad=&quot; &lt;&lt; file.bad() &lt;&lt; endl;

	cout &lt;&lt; &quot;errno=&quot; &lt;&lt; errno &lt;&lt; &quot; (&quot; &lt;&lt; strerror(errno) &lt;&lt; &quot;)&quot; &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>Sollte nicht nur das eof bit gesetzt werden?</p>
<p>Die Datei ist vorhanden und lesbar (wird auch richtig ausgegeben).</p>
<p>Bei der ersten Ausgabe ist keins der bits gesetzt. Bei der zweiten Ausgabe sind eof und fail gesetzt.</p>
<p>Das ganze hab ich unter Windows (minGW mit gcc Version 3.4.2) und MacOS (gcc Version 4.0.1) mit gleichem Ergnis getestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438275</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Thu, 17 Jan 2008 11:30:45 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream und fail bit on Thu, 17 Jan 2008 11:33:37 GMT]]></title><description><![CDATA[<p>Das Überschreiten des Dateiendes gilt als Fehler (weil du an der Stelle keine brauchbaren Daten bekommst) und setzt deshalb das eofbit UND das failbit. Ist also vom Standard so vorgesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438281</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 17 Jan 2008 11:33:37 GMT</pubDate></item></channel></rss>