<?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[struct in&#x2F;aus Datei speichern&#x2F;lade]]></title><description><![CDATA[<p>Hallo c/c++-Community,</p>
<p>ich hänge hier seit 2 Stunden an einem Problem und komme nicht weiter. Mein WG-Mitbewohner hat mir dieses forum empfohlen. Ich hoffe ihr könnt mir bei dierer Lamalie helfen.</p>
<p>Mein Ziel ist es ein Wer-Wird-Millionär Spiel in C++ zu Programmieren.<br />
Ich schreibe gerade an der Management Schnittstelle, die es u.a. ermöglicht beim starten des Programms alle fragen und Antworten aus einer Datei ließt und beim beenden des Programms alle Fragen in diese Datei speichert.</p>
<p>Ich habe folgendes struct gebaut:</p>
<pre><code class="language-cpp">typedef struct questionAnswersTuple {
boole available;
const char* question;
const char* answer;
const char* wrongAnswers[3];
} QATuple;
</code></pre>
<p>Die verschiedenen QATuples speicehre ich in einer dynamischen liste mit einem Zeiger aus nächste Element:</p>
<pre><code class="language-cpp">typedef struct element{
	QATuple qatuple;
	struct element* next;
}Element;
</code></pre>
<p>das speichern funktioniert wunderbar (zumindest ohne fehler ausführbar) mit folgernder Funktion:</p>
<pre><code class="language-cpp">int QuestionCatalog::saveQuestions(const char* dateiname){
	int count = 0;
		ofstream outFile;
		outFile.open( dateiname, ios::out|ios::binary);
		if( !outFile) 
			cerr &lt;&lt; &quot;Fehler beim Öffnen der Datei!&quot; &lt;&lt; endl;
		else { 
			if (erstesElement != NULL){
				Element *element;
				element = erstesElement;
				while (element != NULL){
					if( !outFile.write( (char*)&amp;element-&gt;qatuple, sizeof(QATuple)))	
						cerr &lt;&lt; &quot;Fehler beim Schreiben!&quot; &lt;&lt; endl;
					count++;
					element = element-&gt;next;
				}
				outFile.close();
			}
		}
		cout &lt;&lt; count &lt;&lt; &quot; Fragen exportiert!!!&quot; &lt;&lt; endl;
		return count;
}
</code></pre>
<p>Allerdings funktioniert das lesen überhaupt nicht. Nach dem read() stürtzt das komplette programm ab...</p>
<pre><code class="language-cpp">int QuestionCatalog::loadQuestions(const char* dateiname){
	Element *neueListe;
	int count = 0;
	ifstream inFile( dateiname, ios::in|ios::binary);
	if( !inFile) 
		cerr &lt;&lt; &quot;Konnte Backup-Datei nicht laden!&quot; &lt;&lt; endl;
	else { 
		QATuple neuesTuple;
		while (!inFile.eof()){
			if( !inFile.read( (char*)&amp;neuesTuple, sizeof(QATuple)))
				cerr &lt;&lt; &quot;Fehler beim Lesen&quot; &lt;&lt; endl;
			count++;
			Element *neuesElement = new Element();
			neuesElement-&gt;qatuple = neuesTuple;
			if (neueListe == NULL)
				neueListe = neuesElement;
			else{
				Element *hilf;
				while( (hilf = hilf-&gt;next) != NULL);
				hilf-&gt;next = neuesElement;
			}
		}
		inFile.close();
	}
	return count;
}
</code></pre>
<p>Es wäre wirklich super, wenn mir jemand sagen könnte was ich falsch mache, dennn ich verzweifle gerade...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231107/struct-in-aus-datei-speichern-lade</link><generator>RSS for Node</generator><lastBuildDate>Sat, 26 Sep 2026 00:17:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231107.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Jan 2009 19:08:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to struct in&#x2F;aus Datei speichern&#x2F;lade on Tue, 06 Jan 2009 19:08:07 GMT]]></title><description><![CDATA[<p>Hallo c/c++-Community,</p>
<p>ich hänge hier seit 2 Stunden an einem Problem und komme nicht weiter. Mein WG-Mitbewohner hat mir dieses forum empfohlen. Ich hoffe ihr könnt mir bei dierer Lamalie helfen.</p>
<p>Mein Ziel ist es ein Wer-Wird-Millionär Spiel in C++ zu Programmieren.<br />
Ich schreibe gerade an der Management Schnittstelle, die es u.a. ermöglicht beim starten des Programms alle fragen und Antworten aus einer Datei ließt und beim beenden des Programms alle Fragen in diese Datei speichert.</p>
<p>Ich habe folgendes struct gebaut:</p>
<pre><code class="language-cpp">typedef struct questionAnswersTuple {
boole available;
const char* question;
const char* answer;
const char* wrongAnswers[3];
} QATuple;
</code></pre>
<p>Die verschiedenen QATuples speicehre ich in einer dynamischen liste mit einem Zeiger aus nächste Element:</p>
<pre><code class="language-cpp">typedef struct element{
	QATuple qatuple;
	struct element* next;
}Element;
</code></pre>
<p>das speichern funktioniert wunderbar (zumindest ohne fehler ausführbar) mit folgernder Funktion:</p>
<pre><code class="language-cpp">int QuestionCatalog::saveQuestions(const char* dateiname){
	int count = 0;
		ofstream outFile;
		outFile.open( dateiname, ios::out|ios::binary);
		if( !outFile) 
			cerr &lt;&lt; &quot;Fehler beim Öffnen der Datei!&quot; &lt;&lt; endl;
		else { 
			if (erstesElement != NULL){
				Element *element;
				element = erstesElement;
				while (element != NULL){
					if( !outFile.write( (char*)&amp;element-&gt;qatuple, sizeof(QATuple)))	
						cerr &lt;&lt; &quot;Fehler beim Schreiben!&quot; &lt;&lt; endl;
					count++;
					element = element-&gt;next;
				}
				outFile.close();
			}
		}
		cout &lt;&lt; count &lt;&lt; &quot; Fragen exportiert!!!&quot; &lt;&lt; endl;
		return count;
}
</code></pre>
<p>Allerdings funktioniert das lesen überhaupt nicht. Nach dem read() stürtzt das komplette programm ab...</p>
<pre><code class="language-cpp">int QuestionCatalog::loadQuestions(const char* dateiname){
	Element *neueListe;
	int count = 0;
	ifstream inFile( dateiname, ios::in|ios::binary);
	if( !inFile) 
		cerr &lt;&lt; &quot;Konnte Backup-Datei nicht laden!&quot; &lt;&lt; endl;
	else { 
		QATuple neuesTuple;
		while (!inFile.eof()){
			if( !inFile.read( (char*)&amp;neuesTuple, sizeof(QATuple)))
				cerr &lt;&lt; &quot;Fehler beim Lesen&quot; &lt;&lt; endl;
			count++;
			Element *neuesElement = new Element();
			neuesElement-&gt;qatuple = neuesTuple;
			if (neueListe == NULL)
				neueListe = neuesElement;
			else{
				Element *hilf;
				while( (hilf = hilf-&gt;next) != NULL);
				hilf-&gt;next = neuesElement;
			}
		}
		inFile.close();
	}
	return count;
}
</code></pre>
<p>Es wäre wirklich super, wenn mir jemand sagen könnte was ich falsch mache, dennn ich verzweifle gerade...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640611</guid><dc:creator><![CDATA[Proggen-ist-super]]></dc:creator><pubDate>Tue, 06 Jan 2009 19:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to struct in&#x2F;aus Datei speichern&#x2F;lade on Tue, 06 Jan 2009 19:22:27 GMT]]></title><description><![CDATA[<p>habs nicht genau angeschaut, aber wenn du nur die struktur mit dne pointern speicherst, hast du den string noch lange nicht gespeichrt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640623</guid><dc:creator><![CDATA[jemand-ist-suppe]]></dc:creator><pubDate>Tue, 06 Jan 2009 19:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to struct in&#x2F;aus Datei speichern&#x2F;lade on Tue, 06 Jan 2009 19:33:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Tu dir erstmal einen Gefallen und verwende konsequent C++ Sprachmittel.<br />
Ersetze alle char* durch std::string<br />
statt der eigenen Liste std::list oder std::vector<br />
Die Daten speicherst du besser im Textmodus. Das vergrößert zwar die Datei vereinfacht aber das Einlesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640631</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Jan 2009 19:33:55 GMT</pubDate></item><item><title><![CDATA[Reply to struct in&#x2F;aus Datei speichern&#x2F;lade on Tue, 06 Jan 2009 20:11:43 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>statt der eigenen Liste std::list oder std::vector<br />
Die Daten speicherst du besser im Textmodus. Das vergrößert zwar die Datei vereinfacht aber das Einlesen.</p>
</blockquote>
<p>Danke für deine Antwort. Es wurde uns von unserer Professoring aufgetragen beim starten und beenden in eine binäre datei zu schreiben/lesen und nochmal extra im Programm Fragen über eine normale Textdatei importieren und exportieren zu können.</p>
<p>Wir sollen auch eine selbstprogrammierte Liste verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640642</guid><dc:creator><![CDATA[Proggen-ist-super]]></dc:creator><pubDate>Tue, 06 Jan 2009 20:11:43 GMT</pubDate></item><item><title><![CDATA[Reply to struct in&#x2F;aus Datei speichern&#x2F;lade on Tue, 06 Jan 2009 20:28:10 GMT]]></title><description><![CDATA[<p>schau dir mal den inhalt der gespeicherten datei an, dann wirst du sehen, dass was fehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640656</guid><dc:creator><![CDATA[jemand-ist-suppe]]></dc:creator><pubDate>Tue, 06 Jan 2009 20:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to struct in&#x2F;aus Datei speichern&#x2F;lade on Tue, 06 Jan 2009 20:36:35 GMT]]></title><description><![CDATA[<p>Proggen-ist-super schrieb:</p>
<blockquote>
<p>Wir sollen auch eine selbstprogrammierte Liste verwenden...</p>
</blockquote>
<p>Selbst dann ist:</p>
<pre><code class="language-cpp">typedef struct //...
</code></pre>
<p>Ein Relikt aus alten Zeiten. Du definierst automatisch einen Typ per struct/class/enum auch ohne Typedef. Der Typ hat den Bezeichner, der hinter dem entsprechenden struct/class/enum steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1640662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640662</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 06 Jan 2009 20:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to struct in&#x2F;aus Datei speichern&#x2F;lade on Wed, 07 Jan 2009 09:21:38 GMT]]></title><description><![CDATA[<p>Dann würde ich der struct eine read und eine write-Methode spendieren, die das binäre Lesen und Schreiben übernehmen. Die braucht man dann nur noch aufzurufen. Für späteres textorientiertes Lesen und Schreiben kann man dann ja noch die Streamopreatoren für dies struct erzeugen.</p>
<pre><code class="language-cpp">struct questionAnswersTuple {
  bool available;
  const char* question;
  const char* answer;
  const char* wrongAnswers[3];
  std::istream&amp; read(std::istream&amp; in);
  std::ostream&amp; write(std::ostream&amp; out) const;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1640930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1640930</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 07 Jan 2009 09:21:38 GMT</pubDate></item></channel></rss>