<?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[Dateilesen: Wo liegt derFehler?]]></title><description><![CDATA[<p>Hallo liebe Community!</p>
<p>Ich bin neu hier im Forum und auch neu in C++.<br />
Für mein kleines Spiel möchte ich die Statistiken der Spieler in die Datei &quot;Statistiken.txt&quot; speichern, das funktioniert soweit auch ganz gut.</p>
<p>In der Datei steht dann Beispielsweise:</p>
<pre><code>Klaus 14
Peter 2
Hans 78
Lukas 5
Leon 1
</code></pre>
<p>Nun die Funktion, die die Statistiken ausgeben und sie gleichzeitig auch sortieren soll:</p>
<pre><code>int StatistikOutput() 
{
	struct Daten
	{
		string Name;
		int Punkte;

		string SortedName;
		int SortedPunkte;

	};
	Daten SpielerDaten[256];

	// Datei Lesen
	ifstream fin(&quot;Statistiken.txt&quot;, ifstream::in);

	// Zeilen der Datei zählen
	int Rows = 0;
	string unused;
	while ( getline(fin, unused) ) Rows++;

	// Erfolgreiches Öffnen überprüfen
	if (!fin.is_open())
	{
		cout &lt;&lt; KonnteStatsNichtLaden &lt;&lt; endl;
		return -1;
	}
	else // Highscores laden und in Variablen speichern
	{
                // der Fehler liegt möglicherweise hier
		int i = 1;
		while (fin &gt;&gt;  SpielerDaten[i].Name &gt;&gt; SpielerDaten[i].Punkte)
		{
			i++;
		}
	}

	// Datei schließen
	fin.close();

	// Highscores sortieren
	int PunkteSave = 0;
	string NameSave;
	for (int i = 1; i &lt;= Rows;  i++)
	{
		if (SpielerDaten[i].Punkte &lt; SpielerDaten[i + 1].Punkte)
		{
			PunkteSave = SpielerDaten[i].Punkte;
			NameSave   = SpielerDaten[i].Name;

			SpielerDaten[i].Punkte	= SpielerDaten[i + 1].Punkte;
			SpielerDaten[i].Name	= SpielerDaten[i + 1].Name;

			SpielerDaten[i + 1].SortedPunkte = PunkteSave;
			SpielerDaten[i + 1].SortedName	 = NameSave;
		}
	}

	// Sortierte Highscores ausgeben
	cout &lt;&lt; &quot;Versuche:&quot; &lt;&lt; &quot;	Name:&quot;&lt;&lt; endl;

	for (int i = 1; i &lt;= Rows;  i++)
	{
		cout &lt;&lt; SpielerDaten[i].SortedPunkte &lt;&lt; &quot;		&quot; &lt;&lt; SpielerDaten[i].SortedName &lt;&lt; endl;
	}

	system(&quot;PAUSE&quot;);
	system(&quot;CLS&quot;);
	return 1;
}
</code></pre>
<p>Das, was dann aber angezeigt wird, sieht so aus:</p>
<pre><code>Versuche:		Name:
-858993460
-858993460
-858993460
-858993460
-858993460
</code></pre>
<p>Es sollte aber so aussehen:</p>
<pre><code>Versuche:		Name:
1				Leon
2				Peter
5				Lukas
14				Klaus
78				Hans
</code></pre>
<p>Wo liegt der Fehler?<br />
Hoffe auf Lösung..</p>
<p>MfG Trampeltier</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320700/dateilesen-wo-liegt-derfehler</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 20:47:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320700.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Oct 2013 14:14:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateilesen: Wo liegt derFehler? on Tue, 08 Oct 2013 14:14:01 GMT]]></title><description><![CDATA[<p>Hallo liebe Community!</p>
<p>Ich bin neu hier im Forum und auch neu in C++.<br />
Für mein kleines Spiel möchte ich die Statistiken der Spieler in die Datei &quot;Statistiken.txt&quot; speichern, das funktioniert soweit auch ganz gut.</p>
<p>In der Datei steht dann Beispielsweise:</p>
<pre><code>Klaus 14
Peter 2
Hans 78
Lukas 5
Leon 1
</code></pre>
<p>Nun die Funktion, die die Statistiken ausgeben und sie gleichzeitig auch sortieren soll:</p>
<pre><code>int StatistikOutput() 
{
	struct Daten
	{
		string Name;
		int Punkte;

		string SortedName;
		int SortedPunkte;

	};
	Daten SpielerDaten[256];

	// Datei Lesen
	ifstream fin(&quot;Statistiken.txt&quot;, ifstream::in);

	// Zeilen der Datei zählen
	int Rows = 0;
	string unused;
	while ( getline(fin, unused) ) Rows++;

	// Erfolgreiches Öffnen überprüfen
	if (!fin.is_open())
	{
		cout &lt;&lt; KonnteStatsNichtLaden &lt;&lt; endl;
		return -1;
	}
	else // Highscores laden und in Variablen speichern
	{
                // der Fehler liegt möglicherweise hier
		int i = 1;
		while (fin &gt;&gt;  SpielerDaten[i].Name &gt;&gt; SpielerDaten[i].Punkte)
		{
			i++;
		}
	}

	// Datei schließen
	fin.close();

	// Highscores sortieren
	int PunkteSave = 0;
	string NameSave;
	for (int i = 1; i &lt;= Rows;  i++)
	{
		if (SpielerDaten[i].Punkte &lt; SpielerDaten[i + 1].Punkte)
		{
			PunkteSave = SpielerDaten[i].Punkte;
			NameSave   = SpielerDaten[i].Name;

			SpielerDaten[i].Punkte	= SpielerDaten[i + 1].Punkte;
			SpielerDaten[i].Name	= SpielerDaten[i + 1].Name;

			SpielerDaten[i + 1].SortedPunkte = PunkteSave;
			SpielerDaten[i + 1].SortedName	 = NameSave;
		}
	}

	// Sortierte Highscores ausgeben
	cout &lt;&lt; &quot;Versuche:&quot; &lt;&lt; &quot;	Name:&quot;&lt;&lt; endl;

	for (int i = 1; i &lt;= Rows;  i++)
	{
		cout &lt;&lt; SpielerDaten[i].SortedPunkte &lt;&lt; &quot;		&quot; &lt;&lt; SpielerDaten[i].SortedName &lt;&lt; endl;
	}

	system(&quot;PAUSE&quot;);
	system(&quot;CLS&quot;);
	return 1;
}
</code></pre>
<p>Das, was dann aber angezeigt wird, sieht so aus:</p>
<pre><code>Versuche:		Name:
-858993460
-858993460
-858993460
-858993460
-858993460
</code></pre>
<p>Es sollte aber so aussehen:</p>
<pre><code>Versuche:		Name:
1				Leon
2				Peter
5				Lukas
14				Klaus
78				Hans
</code></pre>
<p>Wo liegt der Fehler?<br />
Hoffe auf Lösung..</p>
<p>MfG Trampeltier</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358894</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 08 Oct 2013 14:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilesen: Wo liegt derFehler? on Tue, 08 Oct 2013 14:37:06 GMT]]></title><description><![CDATA[<p>Hallo Trampeltier,</p>
<p>willkommen im C++-Forum.</p>
<p>Dein Fehler liegt darin, dass DU die Datei liest, um die Zeilen zu zählen (was i.Grunde unnötig ist!) und anschließend versuchst, die Daten zu lesen.<br />
Geht natürlich nicht, weil Du je vorher schon das Datei-Ende erreicht hast.</p>
<p>Besser: mache aus 'SpielerDaten' einen <a href="http://www.cplusplus.com/reference/vector/vector/?kw=vector" rel="nofollow">std::vector</a>, lasse den Code des Zeilenzählens einfach weg und füge bei Zeile 34 noch ein '<a href="http://www.cplusplus.com/reference/vector/vector/push_back/" rel="nofollow">push_back</a>' eines Datensatzes in den vector hinzu.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358904</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 08 Oct 2013 14:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilesen: Wo liegt derFehler? on Tue, 08 Oct 2013 14:57:59 GMT]]></title><description><![CDATA[<p>.. da sind noch mehr Fehler drin.<br />
Wichtig: bei Feldern und Containern der Größe N läuft der Index stets von 0 bis (N-1) und nicht von 1 bis N (so wie bei FORTRAN)</p>
<p>anbei eine gekürzte, korrigierte Fassung:</p>
<pre><code>#include &lt;algorithm&gt; // sort
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt; // vector (s. SpielerDaten)

using namespace std;

int StatistikOutput()
{
    struct Daten
    {
        string Name;
        int Punkte; 
        bool operator&lt;( const Daten&amp; b ) const
        {
            return Punkte &gt; b.Punkte; // mehr Punkte stehen vorn!
        }
    };
    // Daten SpielerDaten[256]; // C-like
    vector&lt; Daten &gt; SpielerDaten;

    {   // ---  Datei Lesen
        ifstream fin(&quot;Statistiken.txt&quot;);
        // Erfolgreiches Öffnen überprüfen
        if (!fin.is_open())
        {
            cout &lt;&lt; KonnteStatsNichtLaden &lt;&lt; endl;
            return -1;
        }

        // Highscores laden und in Variablen speichern
                // der Fehler liegt möglicherweise hier -&gt; Nö
        for( Daten satz; fin &gt;&gt; satz.Name &gt;&gt; satz.Punkte; )
        {
            SpielerDaten.push_back( satz );
        }
    }

    // Highscores sortieren
    sort( SpielerDaten.begin(), SpielerDaten.end() );

    // Sortierte Highscores ausgeben
    cout &lt;&lt; &quot;Versuche:&quot; &lt;&lt; &quot;    Name:&quot;&lt;&lt; endl;

    for (int i = 0; i &lt; SpielerDaten.size();  i++)
    {
        cout &lt;&lt; SpielerDaten[i].Punkte &lt;&lt; &quot;       &quot; &lt;&lt; SpielerDaten[i].Name &lt;&lt; endl;
    }

    system(&quot;PAUSE&quot;);
    system(&quot;CLS&quot;);
    return 1;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358910</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 08 Oct 2013 14:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilesen: Wo liegt derFehler? on Tue, 08 Oct 2013 15:01:35 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht, wieso du bei den Arrays immer bei 1 anfängst. Das erste Element wird mit 0 abgefragt:</p>
<pre><code>SpielerDaten[0].bla();
</code></pre>
<p>Edit: Hach, zu langsam <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2358913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358913</guid><dc:creator><![CDATA[kralo9]]></dc:creator><pubDate>Tue, 08 Oct 2013 15:01:35 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilesen: Wo liegt derFehler? on Tue, 08 Oct 2013 15:27:00 GMT]]></title><description><![CDATA[<p>Vielen Dank Werner!<br />
Durch dich habe ich das Problem beseitigt!<br />
Vector kannte ich bisher noch nicht (wie gesagt ich bin neu) und dass man die Punkte so leicht sortieren kann wusste ich auch nicht. <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>Ich hätte die Punkte &quot;Versuche&quot; nennen sollen, denn je mehr Versuche man bekommt, desto schlechter (konntest du nicht wissen); Folglich mache ich</p>
<pre><code>return Punkte &gt; b.Punkte
</code></pre>
<p>zu</p>
<pre><code>return Punkte &lt; b.Punkte
</code></pre>
<p>.</p>
<p>kralo9 schrieb:</p>
<blockquote>
<p>Ich verstehe nicht, wieso du bei den Arrays immer bei 1 anfängst. Das erste Element wird mit 0 abgefragt:</p>
<pre><code>SpielerDaten[0].bla();
</code></pre>
<p>Edit: Hach, zu langsam <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>
</blockquote>
<p>Das ist etwas, was ich mir angewöhnt habe. Hehe. Danke fürs aufmerksam machen!</p>
<p>Soo, Code funktioniert; Vielen Dank</p>
<p>MfG Trampeltier</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358925</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 08 Oct 2013 15:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to Dateilesen: Wo liegt derFehler? on Tue, 08 Oct 2013 15:37:17 GMT]]></title><description><![CDATA[<p>Trampeltier schrieb:</p>
<blockquote>
<p>kralo9 schrieb:</p>
<blockquote>
<p>Ich verstehe nicht, wieso du bei den Arrays immer bei 1 anfängst. Das erste Element wird mit 0 abgefragt:</p>
<pre><code>SpielerDaten[0].bla();
</code></pre>
<p>Edit: Hach, zu langsam <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>
</blockquote>
<p>Das ist etwas, was ich mir angewöhnt habe. Hehe. Danke fürs aufmerksam machen!</p>
<p>Soo, Code funktioniert; Vielen Dank</p>
<p>MfG Trampeltier</p>
</blockquote>
<p>Dann aber schnell mal wieder abgewöhnen <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/2358929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358929</guid><dc:creator><![CDATA[kralo9]]></dc:creator><pubDate>Tue, 08 Oct 2013 15:37:17 GMT</pubDate></item></channel></rss>