<?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[Probleme mit Datei E&#x2F;A]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich hab vor für ein Spiel eine Bestenliste zu programmieren, und habe dafür mal ne Klasse geschrieben. Das problem ist nur dass wenn im Konstruktor, bzw im Destruktor die liste von ner datei gelesen, bzw. in sie geschrieben wird fehler auftreten. Macht sich in soweit bemerkbar dass nicht das richtige gelesn, bzw geschrieben wird.</p>
<p>Hier mal die relevaten code-schnipsel:</p>
<p>aus dem Konstruktor:</p>
<pre><code class="language-cpp">ifstream in(filename.c_str(), ios::binary);
	if(in)
	{
		for(int i = 0; i &lt; 100; i++)
		{
			in.read((char *)&amp;liste[i], sizeof liste[i]);
			cout &lt;&lt; liste[i].punkte &lt;&lt; endl;
		}

	}
</code></pre>
<p>aus dem Destruktor:</p>
<pre><code class="language-cpp">ofstream out(filename.c_str(), ios::binary);
	for(int i = 0; i &lt; 100; i++)
	{
		out.write((char *)&amp;liste[i], sizeof liste[i]);
	}
	out.close();
</code></pre>
<p>das array liste[100] ist ein Objekt volgender Struktur. Das Array ist in der klasse Private:</p>
<pre><code class="language-cpp">struct record
{
	string name;
	int punkte;
};
</code></pre>
<p>Wenn mir jetzt einer Verraten könnte warum das nicht so geht wie ich mir das Vorstelle wäre ich wieder ein schritt weiter.</p>
<p>Manuel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/68040/probleme-mit-datei-e-a</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 15:34:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/68040.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Mar 2004 13:01:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 13:01:44 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich hab vor für ein Spiel eine Bestenliste zu programmieren, und habe dafür mal ne Klasse geschrieben. Das problem ist nur dass wenn im Konstruktor, bzw im Destruktor die liste von ner datei gelesen, bzw. in sie geschrieben wird fehler auftreten. Macht sich in soweit bemerkbar dass nicht das richtige gelesn, bzw geschrieben wird.</p>
<p>Hier mal die relevaten code-schnipsel:</p>
<p>aus dem Konstruktor:</p>
<pre><code class="language-cpp">ifstream in(filename.c_str(), ios::binary);
	if(in)
	{
		for(int i = 0; i &lt; 100; i++)
		{
			in.read((char *)&amp;liste[i], sizeof liste[i]);
			cout &lt;&lt; liste[i].punkte &lt;&lt; endl;
		}

	}
</code></pre>
<p>aus dem Destruktor:</p>
<pre><code class="language-cpp">ofstream out(filename.c_str(), ios::binary);
	for(int i = 0; i &lt; 100; i++)
	{
		out.write((char *)&amp;liste[i], sizeof liste[i]);
	}
	out.close();
</code></pre>
<p>das array liste[100] ist ein Objekt volgender Struktur. Das Array ist in der klasse Private:</p>
<pre><code class="language-cpp">struct record
{
	string name;
	int punkte;
};
</code></pre>
<p>Wenn mir jetzt einer Verraten könnte warum das nicht so geht wie ich mir das Vorstelle wäre ich wieder ein schritt weiter.</p>
<p>Manuel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480058</guid><dc:creator><![CDATA[allesbelegt]]></dc:creator><pubDate>Sun, 14 Mar 2004 13:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 13:27:40 GMT]]></title><description><![CDATA[<p>cout.read und cout.write sind etwas zweifelhafte Funktionen - es kann gut gehen, muss aber nicht. 'int' ist oft kein Problem, aber sowas wie Zeiger schon und damit auch die Klasse 'std::string'. schreib einfach:<br />
in &gt;&gt; liste[i].name &gt;&gt; liste[i].punkte;<br />
und<br />
out &lt;&lt; liste[i].name &lt;&lt; '\n' &lt;&lt; liste[i].punkte &lt;&lt; '\n';</p>
<p>Hinzu kommt, dass read/write nicht gerade plattformunabhängig sind, op&lt;&lt; und op&gt;&gt; aber schon eher.</p>
<p>Grüße<br />
Fux</p>
<p>PS: wenn der Name auch Leerzeichen enthält, ist std::getline(out,liste[i].name) besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480077</guid><dc:creator><![CDATA[Fux]]></dc:creator><pubDate>Sun, 14 Mar 2004 13:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 14:12:18 GMT]]></title><description><![CDATA[<p>So wie du es beschrieben hast geht es, aber die Lösung gefällt mir irgendwie nicht.<br />
Beim rumprobieren ist mir aufgefallen, dass wenn ich das nicht in einer Klassenfunktion sondern in einer normalen Funktion stehen habe ganz gut funktioniert: Bei Linux und Windoof. Nur eben nicht in der Klasse.<br />
Hat das irgendein Grund?</p>
<p>Manuel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480114</guid><dc:creator><![CDATA[allesbelegt]]></dc:creator><pubDate>Sun, 14 Mar 2004 14:12:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 14:17:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct record 
{ 
    string name; 
    int punkte; 
};
</code></pre>
<p>Wie groß ist denn sizeof record wenn name = &quot;Hallo&quot; und wenn name = &quot;Hallo Welt&quot; ist ?!?</p>
<p>Wie wärs mit nem op&lt;&lt; und op&gt;&gt; für record ? Da hast Du dann auch alle Informationen wenn Du es denn unbedingt binär speichern willst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480117</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Sun, 14 Mar 2004 14:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 14:48:57 GMT]]></title><description><![CDATA[<p>sizeof hat bei mir auch Probleme gemacht sobald der Datensatz aus verschiedenen Datentypen zusammengesetzt war. Ich fülle seitdem Strings immer mit Leerzeichen auf Solllänge auf. Datensatzbreite kann dann errechnet werden, da Speicherbedarf der Datentypen bekannt ist. Auch ein direkter Zugriff auf die Datensätze (gehe zu Satz x) ist nur bei konstanter Länge aller Datensätze möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480134</guid><dc:creator><![CDATA[armindau]]></dc:creator><pubDate>Sun, 14 Mar 2004 14:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 14:58:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>es geht nicht darum, ob dir meine Lösung gefällt oder nicht, dein Lösungsansatz ist schlicht weg falsch (read/write funktioniert mit deiner Struktur einfach nicht) und ich hab versucht einen anderen Weg zu zeigen. Ich kann ja verstehen, dass du es auf &quot;deine Art&quot; machen willst, aber wenn der Ansatz falsch ist, wird es recht schwer. Egal wie du es lösen willst, du musst 'name' und 'punkte' einzeln abspeichern, wobei read/write bei 'name' nicht funktioniert.</p>
<blockquote>
<p>Beim rumprobieren ist mir aufgefallen, dass wenn ich das nicht in einer Klassenfunktion sondern in einer normalen Funktion stehen habe ganz gut funktioniert: Bei Linux und Windoof. Nur eben nicht in der Klasse.<br />
Hat das irgendein Grund?</p>
</blockquote>
<p>Wenn der Programmcode sonst gleich ist, dürfte das nicht passieren.</p>
<p>Grüße<br />
Fux</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480148</guid><dc:creator><![CDATA[Fux]]></dc:creator><pubDate>Sun, 14 Mar 2004 14:58:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 15:14:56 GMT]]></title><description><![CDATA[<p>Man kann schon read und write dafür benutzen.</p>
<p>operatoren für die stuct überladen und in diesem das binärspeichern übernehmen. Nur ist die Frage ob man das so wirlich machen will ?!</p>
<p>Mein Tip wäre: Schreibe mal einen op&lt;&lt; und op&gt;&gt; für die Struktur. Dann kanste es sehr einfach weiterverarbeiten. Du Arbeitest dann wie Fux sagte mit &lt;&lt; . Nur wird dann aus Deiner Struktur ein Datentyp der intern das schreiben übernimmt. Dort würde ich dann ein int speichern das die Länge des Strings angibt (der kann das so lange sein wie er will) und danach die Highscore.</p>
<p>Das solltest Du dann lesen und schreiben können wie Du willst.</p>
<p>Ich persönlich würde den op&lt;&lt; op&gt;&gt; überladen um den String in einer Zeile speichern zu können und mit getline wieder auszulesen. In der nächsten Zeile die Score...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480170</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Sun, 14 Mar 2004 15:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 15:32:07 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/514">@Fux</a><br />
Ja es war ansonsten so ziemlich der gleiche code, um net zu sagen fast der selbe</p>
<p>@Knuddlbar<br />
Überladene Operatoren....<br />
und das als C++ Anfänger ?! <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>
<p>Manuel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480180</guid><dc:creator><![CDATA[allesbelegt]]></dc:creator><pubDate>Sun, 14 Mar 2004 15:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 16:18:19 GMT]]></title><description><![CDATA[<p>allesbelegt schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/514">@Fux</a></p>
<p>und das als C++ Anfänger ?! <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="😉"
    /><br />
Manuel</p>
</blockquote>
<p>read und write als Anfänger ?!</p>
<p>Na, willst nun Anfänger bleiben oder was gegen tun ? <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>Hier mal ein wenig was zum Spielen.</p>
<p>(Ich weiß nicht genau wie man das Problem mit der Zahl und den String am elegantesten löst....)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

// FÜr Beispiele
#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
using namespace std;

struct record
{
	string name;
	int punkte;
}; 

std::ostream &amp; operator&lt;&lt;(std::ostream &amp; out,const record &amp; rec)
{

	out&lt;&lt;rec.punkte&lt;&lt;' '; // Leerzeichen schreiben. Wenn Du sonst 12 Punkte hast und der Name 11Evil ist
						 // Wäre das eingelesene falsch
	out&lt;&lt;rec.name&lt;&lt;'\n'; 

	return out;
}

std::istream &amp; operator&gt;&gt;(std::istream &amp; in,record &amp; rec)
{
	in&gt;&gt;rec.punkte;
	in.get();				// Das Leerzeichen wegwerfen (bzw. das Trennzeichen)
	getline(in,rec.name);   // Und den rest der Zeile für den Namen verwenden
	return in;
}

void tryOne()
{
	// Beispielhandling für eigene lese Routinen
	std::vector&lt;record&gt; recvec;
	record temp;

	cin.clear();
	temp.name = &quot;Hallo&quot;;
	temp.punkte = 12;
	recvec.push_back(temp);

	temp.name = &quot;Hallo2&quot;;
	temp.punkte = 13;
	recvec.push_back(temp);

	temp.name = &quot;Hallo3&quot;;
	temp.punkte = 14;
	recvec.push_back(temp);

	cout&lt;&lt;recvec[0];
	cout&lt;&lt;recvec[1];
	cout&lt;&lt;recvec[2];

	fstream file(&quot;t:\\test.txt&quot;,ios::out);

	file&lt;&lt;recvec[0];
	file&lt;&lt;recvec[1];
	file&lt;&lt;recvec[2];

	file.close();
	file.open(&quot;t:\\test.txt&quot;,ios::in);

	file&gt;&gt;temp;
	cout&lt;&lt;temp;

	file&gt;&gt;temp;
	cout&lt;&lt;temp;

	file&gt;&gt;temp;
	cout&lt;&lt;temp;

}

void trytwo()
{
	// Details hab ich im letzten Beitrag von
	//  http://c-plusplus.net/forum/viewtopic.php?t=39470
	// erklärt
	std::vector&lt;record&gt; recvec;
	record temp;

	cout&lt;&lt;&quot;Eingabesyntax:\n Punkt Text\n Zwischen den Punkten und dem Textein leerzeichen einfügen!\nBeenden mit einem Buchstaben am Anfang\n\n&quot;;
	while(cin&gt;&gt;temp)
	{
		recvec.push_back(temp);
	}

	fstream file(&quot;T:\\Test.txt&quot;,ios::out);
	copy(recvec.begin(),recvec.end(),ostream_iterator&lt;record&gt;(file,&quot;\n&quot;));
	file.close();

	recvec.clear();

	file.open(&quot;T:\\Test.txt&quot;,ios::in);
	istream_iterator&lt;record&gt; beg(file);
	istream_iterator&lt;record&gt; end;

	copy(beg,end,back_inserter(recvec));
	copy(recvec.begin(),recvec.end(),ostream_iterator&lt;record&gt;(cout,&quot;&quot;));

}

int main(int argc, char * argv[])
{
	tryOne();
	cout&lt;&lt;&quot;Und nun trytwo\n\n&quot;;
	trytwo();
	return 0;
}
</code></pre>
<p><a href="http://c-plusplus.net/forum/viewtopic.php?t=39470" rel="nofollow">http://c-plusplus.net/forum/viewtopic.php?t=39470</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/480217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480217</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Sun, 14 Mar 2004 16:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 20:23:46 GMT]]></title><description><![CDATA[<p>ahmm..</p>
<p>ich glaub ich nehm dann doch die lösung von Fux <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>Manuel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480402</guid><dc:creator><![CDATA[allesbelegt]]></dc:creator><pubDate>Sun, 14 Mar 2004 20:23:46 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Sun, 14 Mar 2004 22:08:56 GMT]]></title><description><![CDATA[<p>Na, wer sich das nich mal anschaut wird immer davor zurückschrecken.</p>
<p>Das meiste ist nur ein Beispiel wie es verwendet wird.</p>
<pre><code class="language-cpp">std::ostream &amp; operator&lt;&lt;(std::ostream &amp; out,const record &amp; rec)
{

    out&lt;&lt;rec.punkte&lt;&lt;' '; // Leerzeichen schreiben. Wenn Du sonst 12 Punkte hast und der Name 11Evil ist
                         // Wäre das eingelesene falsch
    out&lt;&lt;rec.name&lt;&lt;'\n'; 

    return out;
}

std::istream &amp; operator&gt;&gt;(std::istream &amp; in,record &amp; rec)
{
    in&gt;&gt;rec.punkte;
    in.get();                // Das Leerzeichen wegwerfen (bzw. das Trennzeichen)
    getline(in,rec.name);   // Und den rest der Zeile für den Namen verwenden
    return in;
}
</code></pre>
<p>Das hier ist das Geheimnis um record auch mit &lt;&lt; und &gt;&gt; verwenden zu können.</p>
<blockquote>
<p>und das als C++ Anfänger ?!<br />
<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>Aber wennst Dir das Beispiel nich anschauen magst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/480450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/480450</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Sun, 14 Mar 2004 22:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Datei E&#x2F;A on Mon, 15 Mar 2004 16:10:53 GMT]]></title><description><![CDATA[<p>Warum schauen solche sachen bei mir immer erst auf den dritten blick einfach aus?<br />
Oder ist es doch net soo einfach ..</p>
<p>Kannst du mir mal die Zeile genauer erklären?</p>
<pre><code class="language-cpp">std::ostream &amp; operator&lt;&lt;(std::ostream &amp; out,const record &amp; rec)
</code></pre>
<p>Funktionieren tuts auf jeden Fall</p>
<p>Manuel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/481024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/481024</guid><dc:creator><![CDATA[allesbelegt]]></dc:creator><pubDate>Mon, 15 Mar 2004 16:10:53 GMT</pubDate></item></channel></rss>