<?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[Unbehandelte Ausnahme nach Laden einer Datei]]></title><description><![CDATA[<p>Hallo nochmal</p>
<p>Hab mir vor kurzem zum Spaß ein kleines Spiel zusammengebastelt, in dem man sich einen Chrakter erstellen und diesen trainieren kann (läuft über Konsole).</p>
<p>Heute habe ich dann 2 weitere Funktionen hinzugefügt, einmal Spiel speichern und Spiel laden, die die aktuellen Werte des Charakters speichern bzw. laden.<br />
Das ganze lässt sich über ein Menü aufrufen, dass ich mittels switch case realisiert habe.</p>
<p>Aber zurück zum Speichern und Laden. Das ganze funktioniert, soweit ich das bisher getestet habe, aber jetzt kommts: Wenn ich einen Spielstand lade, mir daraufhin das Menü angezeigt wird und ich dieses Menü verlassen will, um zum Hauptmenü zurückzukehren kommt diese Errormeldung:</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x5571ad54 (msvcp100d.dll) in Test-Version.exe:<br />
0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xdd32d857.</p>
</blockquote>
<p>Hin und wieder steht anstatt Schreiben auch Lesen.</p>
<pre><code class="language-cpp">void Game::saveGame()
{
    //-----nicht mehr aktuell------

	std::cout &lt;&lt; &quot;\nWirklich speichern? Alter Spielstand wird dabei überschrieben\n&quot;
		      &lt;&lt; &quot;Bestätigen durch Eingabe von (J)a bzw (N)ein: &quot;;
	std::string str;
	std::cin &gt;&gt; str;
	if (str == &quot;j&quot; || str == &quot;J&quot;)
	{
		std::ofstream Output(&quot;Chrakter.ch&quot;, std::ios::binary); 
		if (Output == NULL)
		{
			std::cout &lt;&lt; &quot;\nDatei zum Speichern konnte nicht geöffnet werden!\n&quot;;
		}
		else
		{
           Output.write((char*) &amp;hero, sizeof(hero));
		   std::cout &lt;&lt; &quot;\nSpielstand erfolgreich gesichert\n&quot;;
		}
	    Output.close();

	}
	else if (str == &quot;n&quot; || str == &quot;N&quot;)
	{
		std::cout &lt;&lt; &quot;\nSpeichern abgebrochen\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;\nFalsche Eingabe\n&quot;;
	}
}
</code></pre>
<pre><code class="language-cpp">void Game::loadGame()
{
	std::cout &lt;&lt; &quot;\nWirklich laden? Bisherige Erfolge werden gelöscht\n&quot;
		      &lt;&lt; &quot;Bestätigen durch Eingabe von (J)a bzw (N)ein: &quot;;
	std::string str;
	std::cin &gt;&gt; str;
	if (str == &quot;j&quot; || str == &quot;J&quot;)
	{
		std::ifstream Input(&quot;Charakter.ch&quot;, std::ios::binary);
		if(Input == NULL)
		{
			std::cout &lt;&lt; &quot;\nDatei konnte nicht geöffnet werden!\n&quot;;
		}
		else
		{
			Input.read((char*) &amp;hero, sizeof(hero));
		    std::cout &lt;&lt; &quot;\nSpielstand erfolgreich geladen\n&quot;;
		}
	    Input.close();
	}
	else if (str == &quot;nein&quot; || str == &quot;Nein&quot; || str ==&quot;NEIN&quot;)
	{
		std::cout &lt;&lt; &quot;\nLaden abgebrochen\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;\nFalsche Eingabe\n&quot;;
	}
}
</code></pre>
<pre><code class="language-cpp">void Manager::startNewGame()
{
	char choice=' ';
	Game goTo;
	while(choice != 'z')
	{
	   showNewGameTextOnTerminal();
	   choice = ' ';
	   std::cin &gt;&gt; choice;
	   switch(choice)
	   {
	     case 'n': goTo.createYourHero(); break;
	     case 'e': goTo.showInformationOfHero(); break;
		 case 't': goTo.practiceHero(); break;
		 case 'c': goTo.giveCPs(); break;
		 case 's': goTo.sleep(); break;
		 case 'h': goTo.buyItemsfromMarket(); break;
	     case 'a': goTo.attackEnemy(); break;
		 case 'b': goTo.initializeEnemy(); break;
		 case 'i': goTo.showInformationOfEnemy(); break;
		 case 'p': goTo.saveGame(); break;
		 case 'l': goTo.loadGame(); break;
		 case 'z': break;
		 default: std::cout &lt;&lt; &quot;Nicht implementiert!\n&quot;; break;
	   }
	}
}
</code></pre>
<p>Hab das ganze auch im Debuger durchgespielt.. der Fehler tritt immer dann auf wenn die Bedingung while(choice != 'z') geprüft und aus der Schleife gesprungen wird, aber NUR nachdem ich den Spielstand geladen habe.<br />
Ich lande daraufhin in der Datei xutility bei diesem Codeabschnitt:</p>
<pre><code class="language-cpp">// MEMBER FUNCTIONS FOR _Container_base12
inline void _Container_base12::_Orphan_all()
	{	// orphan all iterators
 #if _ITERATOR_DEBUG_LEVEL == 2
	if (_Myproxy != 0)
		{	// proxy allocated, drain it
		_Lockit _Lock(_LOCK_DEBUG);

		for (_Iterator_base12 **_Pnext = &amp;_Myproxy-&gt;_Myfirstiter;
			*_Pnext != 0; *_Pnext = (*_Pnext)-&gt;_Mynextiter)
			(*_Pnext)-&gt;_Myproxy = 0;
		_Myproxy-&gt;_Myfirstiter = 0;
		}
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */
	}
</code></pre>
<p>Der Fehler soll in dieser Zeile passiert sein</p>
<pre><code class="language-cpp">*_Pnext != 0; *_Pnext = (*_Pnext)-&gt;_Mynextiter)
</code></pre>
<p>Danke und LG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290123/unbehandelte-ausnahme-nach-laden-einer-datei</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 16:13:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290123.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Jul 2011 18:56:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 13:49:55 GMT]]></title><description><![CDATA[<p>Hallo nochmal</p>
<p>Hab mir vor kurzem zum Spaß ein kleines Spiel zusammengebastelt, in dem man sich einen Chrakter erstellen und diesen trainieren kann (läuft über Konsole).</p>
<p>Heute habe ich dann 2 weitere Funktionen hinzugefügt, einmal Spiel speichern und Spiel laden, die die aktuellen Werte des Charakters speichern bzw. laden.<br />
Das ganze lässt sich über ein Menü aufrufen, dass ich mittels switch case realisiert habe.</p>
<p>Aber zurück zum Speichern und Laden. Das ganze funktioniert, soweit ich das bisher getestet habe, aber jetzt kommts: Wenn ich einen Spielstand lade, mir daraufhin das Menü angezeigt wird und ich dieses Menü verlassen will, um zum Hauptmenü zurückzukehren kommt diese Errormeldung:</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x5571ad54 (msvcp100d.dll) in Test-Version.exe:<br />
0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xdd32d857.</p>
</blockquote>
<p>Hin und wieder steht anstatt Schreiben auch Lesen.</p>
<pre><code class="language-cpp">void Game::saveGame()
{
    //-----nicht mehr aktuell------

	std::cout &lt;&lt; &quot;\nWirklich speichern? Alter Spielstand wird dabei überschrieben\n&quot;
		      &lt;&lt; &quot;Bestätigen durch Eingabe von (J)a bzw (N)ein: &quot;;
	std::string str;
	std::cin &gt;&gt; str;
	if (str == &quot;j&quot; || str == &quot;J&quot;)
	{
		std::ofstream Output(&quot;Chrakter.ch&quot;, std::ios::binary); 
		if (Output == NULL)
		{
			std::cout &lt;&lt; &quot;\nDatei zum Speichern konnte nicht geöffnet werden!\n&quot;;
		}
		else
		{
           Output.write((char*) &amp;hero, sizeof(hero));
		   std::cout &lt;&lt; &quot;\nSpielstand erfolgreich gesichert\n&quot;;
		}
	    Output.close();

	}
	else if (str == &quot;n&quot; || str == &quot;N&quot;)
	{
		std::cout &lt;&lt; &quot;\nSpeichern abgebrochen\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;\nFalsche Eingabe\n&quot;;
	}
}
</code></pre>
<pre><code class="language-cpp">void Game::loadGame()
{
	std::cout &lt;&lt; &quot;\nWirklich laden? Bisherige Erfolge werden gelöscht\n&quot;
		      &lt;&lt; &quot;Bestätigen durch Eingabe von (J)a bzw (N)ein: &quot;;
	std::string str;
	std::cin &gt;&gt; str;
	if (str == &quot;j&quot; || str == &quot;J&quot;)
	{
		std::ifstream Input(&quot;Charakter.ch&quot;, std::ios::binary);
		if(Input == NULL)
		{
			std::cout &lt;&lt; &quot;\nDatei konnte nicht geöffnet werden!\n&quot;;
		}
		else
		{
			Input.read((char*) &amp;hero, sizeof(hero));
		    std::cout &lt;&lt; &quot;\nSpielstand erfolgreich geladen\n&quot;;
		}
	    Input.close();
	}
	else if (str == &quot;nein&quot; || str == &quot;Nein&quot; || str ==&quot;NEIN&quot;)
	{
		std::cout &lt;&lt; &quot;\nLaden abgebrochen\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;\nFalsche Eingabe\n&quot;;
	}
}
</code></pre>
<pre><code class="language-cpp">void Manager::startNewGame()
{
	char choice=' ';
	Game goTo;
	while(choice != 'z')
	{
	   showNewGameTextOnTerminal();
	   choice = ' ';
	   std::cin &gt;&gt; choice;
	   switch(choice)
	   {
	     case 'n': goTo.createYourHero(); break;
	     case 'e': goTo.showInformationOfHero(); break;
		 case 't': goTo.practiceHero(); break;
		 case 'c': goTo.giveCPs(); break;
		 case 's': goTo.sleep(); break;
		 case 'h': goTo.buyItemsfromMarket(); break;
	     case 'a': goTo.attackEnemy(); break;
		 case 'b': goTo.initializeEnemy(); break;
		 case 'i': goTo.showInformationOfEnemy(); break;
		 case 'p': goTo.saveGame(); break;
		 case 'l': goTo.loadGame(); break;
		 case 'z': break;
		 default: std::cout &lt;&lt; &quot;Nicht implementiert!\n&quot;; break;
	   }
	}
}
</code></pre>
<p>Hab das ganze auch im Debuger durchgespielt.. der Fehler tritt immer dann auf wenn die Bedingung while(choice != 'z') geprüft und aus der Schleife gesprungen wird, aber NUR nachdem ich den Spielstand geladen habe.<br />
Ich lande daraufhin in der Datei xutility bei diesem Codeabschnitt:</p>
<pre><code class="language-cpp">// MEMBER FUNCTIONS FOR _Container_base12
inline void _Container_base12::_Orphan_all()
	{	// orphan all iterators
 #if _ITERATOR_DEBUG_LEVEL == 2
	if (_Myproxy != 0)
		{	// proxy allocated, drain it
		_Lockit _Lock(_LOCK_DEBUG);

		for (_Iterator_base12 **_Pnext = &amp;_Myproxy-&gt;_Myfirstiter;
			*_Pnext != 0; *_Pnext = (*_Pnext)-&gt;_Mynextiter)
			(*_Pnext)-&gt;_Myproxy = 0;
		_Myproxy-&gt;_Myfirstiter = 0;
		}
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */
	}
</code></pre>
<p>Der Fehler soll in dieser Zeile passiert sein</p>
<pre><code class="language-cpp">*_Pnext != 0; *_Pnext = (*_Pnext)-&gt;_Mynextiter)
</code></pre>
<p>Danke und LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095073</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Wed, 20 Jul 2011 13:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 19:42:24 GMT]]></title><description><![CDATA[<p>was genau ist _PNext ? (bitte um code)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095087</guid><dc:creator><![CDATA[lk]]></dc:creator><pubDate>Tue, 19 Jul 2011 19:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 19:51:33 GMT]]></title><description><![CDATA[<p>Das kann ich leider nicht sagen.. das ist ein Ausschnitt des Quelltextes von der xutility-Datei. In dieser lande ich, wenn die Fehlermeldung ausgeworfen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095097</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Tue, 19 Jul 2011 19:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 19:57:42 GMT]]></title><description><![CDATA[<p>Du zeigst nicht, wie hero definiert ist, ich vermute aber, dass es kein POD ist. Dann funktioniert das Lesen und Schreiben nicht so einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095098</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 19 Jul 2011 19:57:42 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 20:18:47 GMT]]></title><description><![CDATA[<p>hero ist eine Instanz der Klasse Hero (wär hätts gedacht). Diese sieht so aus:</p>
<pre><code class="language-cpp">class Hero
{
private:
       //ziemlich überfüllt, ich weiß.. bin schon am überlegen wie ich das verbessern könnte ;D
	std::string name_;
	int level_;
    int hitPoints_;
	int hpMax_;
    int mana_;
	int manaMax_;
    int creditPoints_;
	int exp_;
	int expMax_;
	int attackPower_;
	int defensePower_;
	float money_;
	std::vector&lt;Item&gt; bag; 
        //dachte anfang es könnte am vector liegen, hab ihn aber auskommentiert -&gt; fehler besteht immernoch
public:
   ...
</code></pre>
<p>Noch die Klasse Item, falls es wichtig sein sollte:</p>
<pre><code class="language-cpp">class Item
{
private:
	std::string name_;
	int quantity_;
	int price_;
public:
   ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2095107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095107</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Tue, 19 Jul 2011 20:18:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 20:34:02 GMT]]></title><description><![CDATA[<p>Mit std::string und std::vector ist es kein POD, du kannst die Klasse also nicht einfach mit read/write behandeln. Stattdessen musst du die Werte der Klasse einzeln schreiben und lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095113</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 19 Jul 2011 20:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 22:02:52 GMT]]></title><description><![CDATA[<p>Sorex schrieb:</p>
<blockquote>
<p>ziemlich überfüllt, ich weiß.. bin schon am überlegen wie ich das verbessern könnte <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=";D"
      alt="😉"
    /></p>
</blockquote>
<p>Fasse ähnliche Eigenschaften zu kleinen Strukturen zusammen. Lohnt sich umso mehr, wenn du nicht nur Daten, sondern auch gleich noch Funktionalität reinkapseln kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095135</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 19 Jul 2011 22:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 22:43:22 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Mit std::string und std::vector ist es kein POD, du kannst die Klasse also nicht einfach mit read/write behandeln. Stattdessen musst du die Werte der Klasse einzeln schreiben und lesen.</p>
</blockquote>
<p>Okay, hast recht.. hab jetzt mal nur versucht den Namen in die Datei zu speichern und dann zu laden -&gt; gleicher Fehler.<br />
Danach hab ich das selbe mit dem Wert Mana (int) gemacht -&gt; Fehler weg</p>
<p>Welche Möglichkeit gibt's denn jetzt einen String in die Datei zu speichern?</p>
<blockquote>
<p>Fasse ähnliche Eigenschaften zu kleinen Strukturen zusammen. Lohnt sich umso mehr, wenn du nicht nur Daten, sondern auch gleich noch Funktionalität reinkapseln kannst.</p>
</blockquote>
<p>Struct ist ne gute Idee, werde ich morgen mal anpacken.. aber inwiefern &quot;Funktionalität reinkapseln&quot;? Verstehe ich gerade nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095146</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Tue, 19 Jul 2011 22:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Tue, 19 Jul 2011 22:46:21 GMT]]></title><description><![CDATA[<p>Sorex schrieb:</p>
<blockquote>
<p>Welche Möglichkeit gibt's denn jetzt einen String in die Datei zu speichern?</p>
</blockquote>
<p>Das einfachste ist wohl der Stream-Operator &lt;&lt;, der sollte sich schon um alles notwendige kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095148</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 19 Jul 2011 22:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 12:45:56 GMT]]></title><description><![CDATA[<p>Hab das mal so gemacht, gibt aber noch ein klitzkleines &quot;Problem&quot;:</p>
<pre><code class="language-cpp">void Game::loadGame()
{
	std::cout &lt;&lt; &quot;\nWirklich laden? Bisherige Erfolge werden gelöscht\n&quot;
		      &lt;&lt; &quot;Bestätigen durch Eingabe von Ja bzw Nein: &quot;;
	char str;
	std::cin &gt;&gt; str;

	if (str == 'j' || str == 'J')
	{
		std::ifstream Input(&quot;hero.ch&quot;);
		if(Input == NULL)
		{
			std::cout &lt;&lt; &quot;\nDatei konnte nicht geöffnet werden!\n&quot;;
		}
		else
		{  

		   Input.read((char*) &amp;hero.attackPower_, sizeof(hero.attackPower_));
		   Input.read((char*) &amp;hero.defensePower_, sizeof(hero.defensePower_));
		   Input.read((char*) &amp;hero.hitPoints_, sizeof(hero.hitPoints_));
		   Input.read((char*) &amp;hero.hpMax_, sizeof(hero.hpMax_));
		   Input.read((char*) &amp;hero.mana_, sizeof(hero.mana_));
		   Input.read((char*) &amp;hero.manaMax_, sizeof(hero.manaMax_));
		   Input.read((char*) &amp;hero.level_, sizeof(hero.level_));
		   Input.read((char*) &amp;hero.exp_, sizeof(hero.exp_));
		   Input.read((char*) &amp;hero.expMax_, sizeof(hero.expMax_));
		   Input.read((char*) &amp;hero.money_, sizeof(hero.money_));
		   Input.read((char*) &amp;hero.creditPoints_, sizeof(hero.creditPoints_));
		   Input &gt;&gt; hero.name_;

		    std::cout &lt;&lt; &quot;\nSpielstand erfolgreich geladen\n&quot;;
		}
	    Input.close();

        if(Input.good())
           std::cout &lt;&lt; &quot;JA\n&quot;;
        else
           std::cout &lt;&lt; &quot;NEIN\n&quot;;
	}
	else if (str == 'n'|| str == 'N')
	{
		std::cout &lt;&lt; &quot;\nLaden abgebrochen\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;\nFalsche Eingabe\n&quot;;
	}
}
</code></pre>
<p>Komischerweise musste ich die Zeile Input &gt;&gt; hero.name_ an den Schluss packen, da ich sonst nur wirre Ergebnise bekam.<br />
So wie's jetzt ist funktioniert es jedenfalls, hab aber dann mal zum Test die if-Anweisung &quot;if(Input.good())&quot; mit eingebaut, bekomme dort als Ergebnis aber ständig &quot;NEIN&quot;.<br />
Wird die Zeile Input &gt;&gt; hero.name_ auskommentiert ist das Ergebnis &quot;JA&quot;. Woran liegt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095344</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Wed, 20 Jul 2011 12:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 12:51:38 GMT]]></title><description><![CDATA[<p>Erstens ist dein Vergleich</p>
<pre><code class="language-cpp">input == NULL
</code></pre>
<p>sinnlos. input ist ein Objekt, kein Zeiger.</p>
<p>Zweitens bezweifle ich, dass du Binärdaten lesen/schreiben möchtest. Du kannst dafür auch einfach die Stream-Operatoren verwenden, die wurden nämlich schon in weiser Vorraussicht von C++ für alle Grunddatentypen (und std::string) überladen <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>Drittens, hier ein Schema, wie ich beim Lesen einer Datei vorgehen würde.</p>
<pre><code class="language-cpp">int main()
{
    std::ifstream is(&quot;blah.blubb&quot;);

    if(!is.is_open())
    {
        std::cout &lt;&lt; &quot;Fehler beim Öffnen der Datei&quot; &lt;&lt; std::endl;
        return 1;
    }

    is &gt;&gt; daten;

    if(!is.eof())
    {
        std::cout &lt;&lt; &quot;Fehler beim Lesen der Datei&quot; &lt;&lt; std::endl;
        return 1;
    }

    // is wird am Ende des Scopes automatisch geschlossen. Nennt sich RAII.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2095349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095349</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Jul 2011 12:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 13:16:27 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Erstens ist dein Vergleich</p>
<pre><code class="language-cpp">input == NULL
</code></pre>
<p>sinnlos. input ist ein Objekt, kein Zeiger.</p>
</blockquote>
<p>Da hab ich einfach mal dem Autor des Buches vertraut, aber gut es jetzt besser zu wissen.</p>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Zweitens bezweifle ich, dass du Binärdaten lesen/schreiben möchtest. Du kannst dafür auch einfach die Stream-Operatoren verwenden, die wurden nämlich schon in weiser Vorraussicht von C++ für alle Grunddatentypen (und std::string) überladen <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>Den Binärdatentyp habe ich in der aktuellen Version nicht mehr drin <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>314159265358979 schrieb:</p>
<blockquote>
<p>Drittens, hier ein Schema, wie ich beim Lesen einer Datei vorgehen würde.</p>
<pre><code class="language-cpp">int main()
{
    std::ifstream is(&quot;blah.blubb&quot;);

    if(!is.is_open())
    {
        std::cout &lt;&lt; &quot;Fehler beim Öffnen der Datei&quot; &lt;&lt; std::endl;
        return 1;
    }

    is &gt;&gt; daten;

    if(!is.eof())
    {
        std::cout &lt;&lt; &quot;Fehler beim Lesen der Datei&quot; &lt;&lt; std::endl;
        return 1;
    }

    // is wird am Ende des Scopes automatisch geschlossen. Nennt sich RAII.
}
</code></pre>
</blockquote>
<p>Bis auf den beiden if-Anweisungen hatte ich vorhin das selbe Schema verfolgt. Die Daten wurden nach dem Laden jedoch alle hintereinander angezeigt und nicht in der, für den Wert vorgesehenen Zeile.</p>
<p>Edit:<br />
Habe gerade bemerkt, dass sich dieses &quot;alles in einer Zeile Laden&quot; mit einem &quot;\n&quot; beim Schreiben in die Datei umgehen lässt. Ist aber etwas umständlich, zumal das Ergebnis beim if(Input.good()) immernoch false bleibt (wobei ich mir ehrlich gesagt nichmal sicher bin, ob das auch was zu sagen hat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095369</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Wed, 20 Jul 2011 13:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 13:31:01 GMT]]></title><description><![CDATA[<p>Sorex schrieb:</p>
<blockquote>
<p>Da hab ich einfach mal dem Autor des Buches vertraut, aber gut es jetzt besser zu wissen.</p>
</blockquote>
<p>Welches Buch ist das? Hat der Autor die Initialen J.W.?</p>
<p>Sorex schrieb:</p>
<blockquote>
<p>Den Binärdatentyp habe ich in der aktuellen Version nicht mehr drin <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 hat damit nichts zu tun. Sobald du .read() aufrufst, liest du hier Binär.<br />
Mit &gt;&gt; liest man formatiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095384</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Jul 2011 13:31:01 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 13:39:28 GMT]]></title><description><![CDATA[<p>Hast du auch die Speicher-Methode mit angepasst? Die beiden müssen natürlich Hand in Hand arbeiten, poste optimalerweise nochmal deine jetzige Fassung beider Methoden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095393</guid><dc:creator><![CDATA[bitmap.button]]></dc:creator><pubDate>Wed, 20 Jul 2011 13:39:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 13:41:26 GMT]]></title><description><![CDATA[<p>Das ist das Problem, wenn man Unreg ist, man kann nicht editieren.</p>
<p>Dir ist schon klar, dass du beim Speichern eine Datei mit Namen &quot;<a href="http://Chrakter.ch" rel="nofollow">Chrakter.ch</a>&quot; und NICHT &quot;<a href="http://Charakter.ch" rel="nofollow">Charakter.ch</a>&quot; erstellst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095396</guid><dc:creator><![CDATA[bitmap.button]]></dc:creator><pubDate>Wed, 20 Jul 2011 13:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 13:45:28 GMT]]></title><description><![CDATA[<p>Aktuell sehen sie so aus:</p>
<pre><code class="language-cpp">void Game::saveGame()
{
	std::cout &lt;&lt; &quot;\nWirklich speichern? Alter Spielstand wird dabei überschrieben\n&quot;
		      &lt;&lt; &quot;Bestätigen durch Eingabe von (J)a bzw (N)ein: &quot;;
	char str;
	std::cin &gt;&gt; str;
	if (str == 'j' || str == 'J')
	{
		std::ofstream Output(&quot;hero.ch&quot;);
		if (Output == NULL)
		{
			std::cout &lt;&lt; &quot;\nDatei zum Speichern konnte nicht geöffnet werden!\n&quot;;
		}
		else
		{

		   Output.write((char*) &amp;hero.attackPower_, sizeof(hero.attackPower_));
		   Output.write((char*) &amp;hero.defensePower_, sizeof(hero.defensePower_));
		   Output.write((char*) &amp;hero.hitPoints_, sizeof(hero.hitPoints_));
		   Output.write((char*) &amp;hero.hpMax_, sizeof(hero.hpMax_));
		   Output.write((char*) &amp;hero.mana_, sizeof(hero.mana_));
		   Output.write((char*) &amp;hero.manaMax_, sizeof(hero.manaMax_));
		   Output.write((char*) &amp;hero.level_, sizeof(hero.level_));
		   Output.write((char*) &amp;hero.exp_, sizeof(hero.exp_));
		   Output.write((char*) &amp;hero.expMax_, sizeof(hero.expMax_));
		   Output.write((char*) &amp;hero.money_, sizeof(hero.money_));
		   Output.write((char*) &amp;hero.creditPoints_, sizeof(hero.creditPoints_));
		   Output &lt;&lt; hero.name_;

		   std::cout &lt;&lt; &quot;\nSpielstand erfolgreich gesichert\n&quot;;
		}
	    Output.close();
	}
	else if (str == 'n'|| str == 'N')
	{
		std::cout &lt;&lt; &quot;\nSpeichern abgebrochen\n&quot;;
	}
	else
	{
		std::cout &lt;&lt; &quot;\nFalsche Eingabe\n&quot;;
	}
}
</code></pre>
<pre><code class="language-cpp">void Game::loadGame()
{
    std::cout &lt;&lt; &quot;\nWirklich laden? Bisherige Erfolge werden gelöscht\n&quot;
              &lt;&lt; &quot;Bestätigen durch Eingabe von Ja bzw Nein: &quot;;
    char str;
    std::cin &gt;&gt; str;

    if (str == 'j' || str == 'J')
    {
        std::ifstream Input(&quot;hero.ch&quot;);
        if(Input == NULL)
        {
            std::cout &lt;&lt; &quot;\nDatei konnte nicht geöffnet werden!\n&quot;;
        }
        else
        {  

           Input.read((char*) &amp;hero.attackPower_, sizeof(hero.attackPower_));
           Input.read((char*) &amp;hero.defensePower_, sizeof(hero.defensePower_));
           Input.read((char*) &amp;hero.hitPoints_, sizeof(hero.hitPoints_));
           Input.read((char*) &amp;hero.hpMax_, sizeof(hero.hpMax_));
           Input.read((char*) &amp;hero.mana_, sizeof(hero.mana_));
           Input.read((char*) &amp;hero.manaMax_, sizeof(hero.manaMax_));
           Input.read((char*) &amp;hero.level_, sizeof(hero.level_));
           Input.read((char*) &amp;hero.exp_, sizeof(hero.exp_));
           Input.read((char*) &amp;hero.expMax_, sizeof(hero.expMax_));
           Input.read((char*) &amp;hero.money_, sizeof(hero.money_));
           Input.read((char*) &amp;hero.creditPoints_, sizeof(hero.creditPoints_));
           Input &gt;&gt; hero.name_;

            std::cout &lt;&lt; &quot;\nSpielstand erfolgreich geladen\n&quot;;
        }
        Input.close();

        if(Input.good())
           std::cout &lt;&lt; &quot;JA\n&quot;;
        else
           std::cout &lt;&lt; &quot;NEIN\n&quot;;
    }
    else if (str == 'n'|| str == 'N')
    {
        std::cout &lt;&lt; &quot;\nLaden abgebrochen\n&quot;;
    }
    else
    {
        std::cout &lt;&lt; &quot;\nFalsche Eingabe\n&quot;;
    }
}
</code></pre>
<blockquote>
<p>Welches Buch ist das? Hat der Autor die Initialen J.W.?</p>
</blockquote>
<p>Das Buch nennt sich C++ für Spieleprogrammierer und ist von Heiko Kalista</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095403</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Wed, 20 Jul 2011 13:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 13:48:16 GMT]]></title><description><![CDATA[<p>bitmap.button schrieb:</p>
<blockquote>
<p>Das ist das Problem, wenn man Unreg ist, man kann nicht editieren.</p>
<p>Dir ist schon klar, dass du beim Speichern eine Datei mit Namen &quot;<a href="http://Chrakter.ch" rel="nofollow">Chrakter.ch</a>&quot; und NICHT &quot;<a href="http://Charakter.ch" rel="nofollow">Charakter.ch</a>&quot; erstellst?</p>
</blockquote>
<p>Ja, das war die Version von gestern.. hab sie danach auf <a href="http://hero.ch" rel="nofollow">hero.ch</a> umgetauft (entstehen weniger Tippfehler xD)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095408</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Wed, 20 Jul 2011 13:48:16 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 17:21:49 GMT]]></title><description><![CDATA[<p>Wie schon mehrfach erwähnt wurde: Verzichte lieber auf die read()/write() und verwende für alle Daten die Stream-Operatoren.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22268">@Pi</a>: Hat der eof-Test bei deinem Code eigentlich einen tieferen Sinn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095522</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:21:49 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 17:34:23 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22268">@Pi</a>: Hat der eof-Test bei deinem Code eigentlich einen tieferen Sinn?</p>
</blockquote>
<p>Wenn das Ende erreicht wurde, ist alles glatt gelaufen. Wenn nicht, nicht. Ist doch logisch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095533</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 17:41:50 GMT]]></title><description><![CDATA[<p>Erstens erinnere ich mich düster, daß eof erst nach einem erfolglosen Leseversuch gesetzt wird. Und zweitens: Was machst du, wenn in der Datei mehr steht als dein Lese-Operator erfasst hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095539</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 17:58:06 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Erstens erinnere ich mich düster, daß eof erst nach einem erfolglosen Leseversuch gesetzt wird. Und zweitens: Was machst du, wenn in der Datei mehr steht als dein Lese-Operator erfasst hat?</p>
</blockquote>
<p>Im Normalfall lese ich alles aus. Will man das nicht, muss man anders vorgehen.<br />
Aber du hast wohl Recht, wenn du meinst, dass die Überprüfung mit .fail() besser ist, da immer funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095555</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Jul 2011 17:58:06 GMT</pubDate></item><item><title><![CDATA[Reply to Unbehandelte Ausnahme nach Laden einer Datei on Wed, 20 Jul 2011 19:02:02 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wie schon mehrfach erwähnt wurde: Verzichte lieber auf die read()/write() und verwende für alle Daten die Stream-Operatoren.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22268">@Pi</a>: Hat der eof-Test bei deinem Code eigentlich einen tieferen Sinn?</p>
</blockquote>
<p>Hab das so gemacht, funktioniert auch wunderbar, nur das Ergebnis, was Input.good() liefert bleibt auch hier false.<br />
Aber warum ist das so? Ist das überhaupt von Belang oder kann ich das getrost ignorieren? <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/2095616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095616</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Wed, 20 Jul 2011 19:02:02 GMT</pubDate></item></channel></rss>