<?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[Anfänger braucht hilfe]]></title><description><![CDATA[<p>Hi erstmal,</p>
<p>ich habe vor ein paar Tagen damit angefangen C++ zu lernen.</p>
<p>Momentan bin ich dabei ein kleines Quizprogramm zu schreiben.<br />
Dabei bin ich auf ein Problem gestoßen und ich habe einfach keine Ahnung warum das passiert was passiert.<br />
Natürlich sind meine C++ kenntnisse noch sehr beschränkt und Ihr werdet euch herzlich über meinen Quelltext amüsieren aber was solls:</p>
<p>Wie ihr seht habe ich unten mittels Zufallsgenerator einen Datensatz aus einer externen *.txt datei ausgewählt.<br />
Nachdem ich eine Frage egal ob Falsch oder Richtig beantworte beginnt das script von vorne... so oft wie Datensätze vorhanden sind.</p>
<p>Allerdings wird danach die Frage nicht mehr korrekt gestellt. Will heißen es wird kein Land mehr abgefragt sondern eine Leerstelle. Ich kann leider den fehler nicht erkennen. Sicherlich könnt ihr mir dabei helfen.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;
using namespace std;

main()
{
	ifstream dat_ein;
	string dateiname = (&quot;daten.txt.&quot;);

	dat_ein.open(dateiname.c_str(), ios_base::in);

		if(!dat_ein)
		{
			cout &lt;&lt; &quot;Die Datei konnte nicht geöffnet werden!&quot;;
			cout &lt;&lt; &quot;endl&quot;;
			return -1;
		}

	int anzahl;
	int datensatz;

	string land, stadt;

	int loop;
	int loop1;

	string antwort;

	dat_ein &gt;&gt; anzahl;

for(loop1 = 1; loop1 &lt;= anzahl; ++loop1)
{
	srand( (unsigned)time( NULL) );
	datensatz = rand() % anzahl + 1;

	loop = 2 * datensatz;

	while(loop &gt;= 2)
	{
	dat_ein &gt;&gt; land &gt;&gt; stadt;
	loop -= 2;
	}

	cout &lt;&lt; &quot;Wie heisst die Hauptstadt von &quot; &lt;&lt; land &lt;&lt; &quot;? &quot;;
	cin &gt;&gt; antwort;
	cout &lt;&lt; endl &lt;&lt; endl;

	if(antwort == stadt)
	{
		cout &lt;&lt; &quot;\tRichtig!&quot; &lt;&lt; endl &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;\tFALSCH!&quot; &lt;&lt; endl &lt;&lt; &quot;Die richtige Antwort lautet &quot; &lt;&lt; stadt &lt;&lt; &quot;!&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;
	}
}

dat_ein.close();

return 0;
}
</code></pre>
<p>mfg Fusle</p>
<p>PS: Sorry das ich euch mit solchen trivialitäten die Zeit stehle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197308/anfänger-braucht-hilfe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 04:34:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197308.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Nov 2007 02:43:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 02:43:25 GMT]]></title><description><![CDATA[<p>Hi erstmal,</p>
<p>ich habe vor ein paar Tagen damit angefangen C++ zu lernen.</p>
<p>Momentan bin ich dabei ein kleines Quizprogramm zu schreiben.<br />
Dabei bin ich auf ein Problem gestoßen und ich habe einfach keine Ahnung warum das passiert was passiert.<br />
Natürlich sind meine C++ kenntnisse noch sehr beschränkt und Ihr werdet euch herzlich über meinen Quelltext amüsieren aber was solls:</p>
<p>Wie ihr seht habe ich unten mittels Zufallsgenerator einen Datensatz aus einer externen *.txt datei ausgewählt.<br />
Nachdem ich eine Frage egal ob Falsch oder Richtig beantworte beginnt das script von vorne... so oft wie Datensätze vorhanden sind.</p>
<p>Allerdings wird danach die Frage nicht mehr korrekt gestellt. Will heißen es wird kein Land mehr abgefragt sondern eine Leerstelle. Ich kann leider den fehler nicht erkennen. Sicherlich könnt ihr mir dabei helfen.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;
using namespace std;

main()
{
	ifstream dat_ein;
	string dateiname = (&quot;daten.txt.&quot;);

	dat_ein.open(dateiname.c_str(), ios_base::in);

		if(!dat_ein)
		{
			cout &lt;&lt; &quot;Die Datei konnte nicht geöffnet werden!&quot;;
			cout &lt;&lt; &quot;endl&quot;;
			return -1;
		}

	int anzahl;
	int datensatz;

	string land, stadt;

	int loop;
	int loop1;

	string antwort;

	dat_ein &gt;&gt; anzahl;

for(loop1 = 1; loop1 &lt;= anzahl; ++loop1)
{
	srand( (unsigned)time( NULL) );
	datensatz = rand() % anzahl + 1;

	loop = 2 * datensatz;

	while(loop &gt;= 2)
	{
	dat_ein &gt;&gt; land &gt;&gt; stadt;
	loop -= 2;
	}

	cout &lt;&lt; &quot;Wie heisst die Hauptstadt von &quot; &lt;&lt; land &lt;&lt; &quot;? &quot;;
	cin &gt;&gt; antwort;
	cout &lt;&lt; endl &lt;&lt; endl;

	if(antwort == stadt)
	{
		cout &lt;&lt; &quot;\tRichtig!&quot; &lt;&lt; endl &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;\tFALSCH!&quot; &lt;&lt; endl &lt;&lt; &quot;Die richtige Antwort lautet &quot; &lt;&lt; stadt &lt;&lt; &quot;!&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;
	}
}

dat_ein.close();

return 0;
}
</code></pre>
<p>mfg Fusle</p>
<p>PS: Sorry das ich euch mit solchen trivialitäten die Zeit stehle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400088</guid><dc:creator><![CDATA[Datalos]]></dc:creator><pubDate>Fri, 09 Nov 2007 02:43:25 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 03:29:52 GMT]]></title><description><![CDATA[<p>Wie haste deine Datei mit den Datensätzen den aufgebaut?</p>
<p>Und normal heißt es</p>
<p>int main ()<br />
{<br />
.....<br />
}<br />
------------</p>
<p>cout &lt;&lt; endl; statt cout &lt;&lt; &quot;endl&quot;;</p>
<p>------------</p>
<p>So kleiner Tipp am Rande. Definiere deine Variablen am besten an Funktionsanfang.<br />
Ist leichter zu verstehen und zu warten.</p>
<p>Also dein Problem ist das -&gt; dat_ein &gt;&gt; anzahl;<br />
Denke mal das soll dafür stehen wie viel Datensätze vorhanden sind.<br />
Bei mir kommt es bei 4 zeilen in daten.txt zu der Zahl 4487064.</p>
<p>Und da deine Schleife &quot;for(loop1 = 1; loop1 &lt;= anzahl(4487064); ++loop1)&quot; ist, wird die auch nicht so schnell beendet.</p>
<p>Was du besten tun solltest. Alle Datensätze einlesen zuerst. Und dann haste deine Anzahl.</p>
<p>Glaub geht mit einer while schleife mit EOF und wen da alle Zeilen Zählst das durch 2.</p>
<p>Ps.: bin auch noch Anfänger. Aber hoffe hilft dir trotzdem.</p>
<p>mfg isi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400090</guid><dc:creator><![CDATA[isiprimax]]></dc:creator><pubDate>Fri, 09 Nov 2007 03:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 03:42:43 GMT]]></title><description><![CDATA[<p>Aufbau der Datenbank:</p>
<pre><code>9
Angola Luanda
Kolumbien Bogota
USA Washington
Schweiz Bern
Schweden Stockholm
Senegal Dakar
Niederlande Amsterdam
Deutschland Berlin
Japan Tokio
</code></pre>
<p>Und zu der sache mit INT main () &lt;&lt; danke hab ich wohl geschlampt.</p>
<p>-----------------------------------------------------------</p>
<p>EDIT: nachdem ich jetzt sicher 30 mal das Programm getestet habe ist mir aufgefallen das nicht immer das land in der frage fehlt. Manchmal kommen 2 - 3 &quot;korrekte&quot; fragen bis der Fehler wieder auftaucht.<br />
Klingt das nach einem fehler in der Datenbank?</p>
<p>---------------------------------------------------------</p>
<p>EDIT2 : Also die &quot;for(loop1 = 1; loop1 &lt;= anzahl; ++loop1)&quot;<br />
wird nach exakt neun durchgängen beendet.</p>
<p>Die Frage: &quot;Wie lautet die Hauptstadt von ?&quot; kann ich ja immernoch falsch beantworten und nach 9 falsch beantworten Fragen ist das Programm dann auch beendet...</p>
<p>Nur wie gesagt verstehe ich immernoch nicht aus welchem Grund auf einmal kein Land mehr in der Frage vorkommt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ist ja auch nicht allzu wichtig... Sollte ja nur eine Übung sein vielleicht kommt mir die erleuchtung ja wenn ich mich etwas mehr auskenne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Und das mit den Variablen werd ich mir angewöhnen.</p>
<p>PS: wo siehst du cout &lt;&lt; &quot;endl&quot;; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400091</guid><dc:creator><![CDATA[Datalos]]></dc:creator><pubDate>Fri, 09 Nov 2007 03:42:43 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 03:45:40 GMT]]></title><description><![CDATA[<p>Also ich hab es eben getestet und die Anzahl wird korrekt eingelesen.</p>
<p>Was mir auffällt.</p>
<p>Bei Mir wird sind meist 2-3 fragen richtig. Und nach der letzten Frage folgt nur noch Japan Tokio, weil da wohl das Dateiende erreicht ist. Das Random arbeitet auch richtig. Ich denke du müsstest nach dem Daten einlesen deine Datei schliessen. Damit die wieder bei 0 anfängt. Da ich leider noch nichts mit fstream geschrieben hab, musst du wohl google nutzen oder warten.</p>
<p>Ich denke eben das zb<br />
datensatz 8 = Deutschland<br />
datensatz 7 = Japan<br />
dann und dann bleibt er da stehen.</p>
<p>Als würde er nicht einen direkten Sprung machen, sondern Addieren.</p>
<p>mfg</p>
<p>ps:</p>
<pre><code>dat_ein.open(dateiname.c_str(), ios_base::in);

        if(!dat_ein)
        {
            cout &lt;&lt; &quot;Die Datei konnte nicht geöffnet werden!&quot;;
     &gt;&gt;&gt;&gt;&gt;  cout &lt;&lt; &quot;endl&quot;;      &lt;&lt;&lt;&lt;&lt;&lt;&lt;
            return -1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1400094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400094</guid><dc:creator><![CDATA[isiprimax]]></dc:creator><pubDate>Fri, 09 Nov 2007 03:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 07:23:41 GMT]]></title><description><![CDATA[<p>Naja jetzt funktioniert es.<br />
Der ausschlaggebende Punkt war anscheinend das ich nur den Zuffalsgenerator und die Fragestellungen in die for Schleife gepackt habe.</p>
<p>Weite ich diese aber aus und Wiederhole den gesamten Queltext funktioniert das ganze. Warum genau weiss ich jetz leider auch nicht aber vielleicht wirds mir irgenwdann klar.</p>
<p>Hier nochmal der korrekte Code:</p>
<pre><code>// quiz.cpp Ein kleines Haupstädtequiz
//
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;
#include &lt;cstdio&gt;
using namespace std;

int main()
{
	int anzahl;
	int datensatz;
	int richtig;
	int falsch;
	int loop;
	int zaehler;

	richtig = 0;
	falsch = 0;

for(zaehler = 1; zaehler &lt;= 9; ++zaehler)
{

	ifstream dat_ein;
	string dateiname = (&quot;daten.txt.&quot;);

	dat_ein.open(dateiname.c_str(), ios_base::in);

		if(!dat_ein)
		{
			cout &lt;&lt; &quot;Die Datei konnte nicht geöffnet werden!&quot;;
			cout &lt;&lt; endl;
			return -1;
		}

	string land, stadt;

	string antwort;

	dat_ein &gt;&gt; anzahl;

	srand( (unsigned)time( NULL) );
	datensatz = rand() % anzahl + 1;

	loop = 2 * datensatz;

	while(loop &gt;= 2)
	{
	dat_ein &gt;&gt; land &gt;&gt; stadt;
	loop -= 2;
	}

	cout &lt;&lt; &quot;Wie heisst die Hauptstadt von &quot; &lt;&lt; land &lt;&lt; &quot;? &quot;;
	cin &gt;&gt; antwort;
	cout &lt;&lt; endl &lt;&lt; endl;

	if(antwort == stadt)
	{
		cout &lt;&lt; &quot;\tRichtig!&quot; &lt;&lt; endl &lt;&lt; endl;
		richtig++;

	}
	else
	{
		cout &lt;&lt; &quot;\tFALSCH!&quot; &lt;&lt; endl &lt;&lt; &quot;Die richtige Antwort lautet &quot; &lt;&lt; stadt &lt;&lt; &quot;!&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;
		falsch++;
	}
if(zaehler == anzahl)
{
cout &lt;&lt; &quot;Das Quiz endet hier!&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Du hast &quot; &lt;&lt; richtig &lt;&lt; &quot; Fragen Richtig und &quot; &lt;&lt; falsch &lt;&lt; &quot; Falsch beantwortet!&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Eingabetaste um Programm zu beenden&quot;;
fflush(stdin);
getchar();
}

dat_ein.close();

}
return 0;
}
</code></pre>
<p>Zusätzlich habe ich noch eine &quot;Statistik&quot; mit den Richtigen und Falschen antworten eingebaut.</p>
<p>Ohne deine Denkanstöße währe ich wohl nicht drauf gekommen danke isi.</p>
<p>PS:<br />
Keine Ahnung wie umfangreich das ist aber ich werde versuchen das das Programm bereits gestellte Fragen ausklammert damit sie in einem Durchlauf nicht wiederholt werden.</p>
<p>Ausserdem währe eine art &quot;highscore&quot; noch interessant für mich!</p>
<p>Vielleicht hat ja jemand ein paar Denkhilfen für mich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>MFG Fusle</p>
<p>EDIT:</p>
<p>Alles klar ich hab gleich mal etwas weiter Probiert um rauszukriegen wie ich verhindern kann das dass Programm mehrmals die selbe Frage stellt.</p>
<p>Meine idee war eigentlich die richtigen antworten in einem Array zu speichern um dann beim nächsten Durchlauf der for Schleife, vor der Ausgabe der Frage die antworten abzugleichen und evtl die schleife wieder von vorn laufen zu lassen.</p>
<p>Nun weiss ich nichtmal ansatzweise wie ich strings in einem Array speichern soll.<br />
Ich weiss nichtmal ob ich mit dem Gedanken auf dem richtigen weg bin.</p>
<p>Über Google hab ich was von Strings in char Arrays gelesen nur leider steig ich da nicht ganz durch. Sieht mir alles sehr fortgeschritten aus.</p>
<p>Vielleicht könnt ihr mir da helfen.</p>
<p>Danke schonmal!</p>
<p>MFG Fusle</p>
<p>PS: Ich habe das jetzt in meiner Laiensprache gehalten da ich mit den begriffen Deklarieren Initialisieren usw noch nicht ganz sicher bin und da nur sachen durcheinanderbringen würde!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400096</guid><dc:creator><![CDATA[Datalos]]></dc:creator><pubDate>Fri, 09 Nov 2007 07:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 11:36:24 GMT]]></title><description><![CDATA[<p>Keiner ne idee? Wär echt supernett wenn sich da mal jemand äußern würd <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>mfg Datalos</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400224</guid><dc:creator><![CDATA[Datalos]]></dc:creator><pubDate>Fri, 09 Nov 2007 11:36:24 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 11:47:52 GMT]]></title><description><![CDATA[<p>Zu Arrays gibt es eigentlich genug gute Erklärungen im Netz - wobei ich dir eher zu einem std::vector&lt;&gt; raten würde:</p>
<pre><code class="language-cpp">//Einlesen
vector&lt;pair&lt;string,string&gt; &gt; laender;
ifstream dat_ein(&quot;daten.txt&quot;);
do
{
  string land,hstadt;
  dat_ein&gt;&gt;land&gt;&gt;hstadt;
  if(dat_ein) laender.push_back(make_pair(land,hstadt));
}
while(dat_ein);

//verwenden
datensatz = rand()%lander.size();
cout&lt;&lt;&quot;Wie heißt die Hauptstadt von &quot;&lt;&lt;laender[datensatz].first&lt;&lt;&quot;?\n&quot;;
cin&gt;&gt;antwort;
if(antwort==laender[datensatz].second)
  ...
</code></pre>
<p>Noch einige Anmerkungen:<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> srand() mußt du nicht in die Schleife packen - das muß nur einmal beim Start aufgerufen werden<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> fflush(stdin) ist <strong>böse</strong> - nimm lieber <code>cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400229</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Nov 2007 11:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger braucht hilfe on Fri, 09 Nov 2007 12:03:22 GMT]]></title><description><![CDATA[<p>warum es mit der schleifenausweitung klappt kann ich dir sagen. da du die datei so immerwieder neu öffnest sitzt der cursor auf pos 1 und nicht auf pos x wie zuvor. Jetzt kurz zum verständniss das prog soll so lange fragen stellen bis alle fragen abgearbeitet sind? wieso lädst du dann jede frage einzeln aus der datei und nicht die datei in einen buffer. dadurch ergibt sich ein vorteil die feldnummer des buffers an der land/stadt steht ist auto. eine ID und nu brauchst nur noch ne kleine liste der abgearbeiteten IDs. das array kannst mit vector bauen, obwohl ich mehr auf verkettete listen stehe aber das bleibt sich egal. du kannst auch statt der ids einfach den string bzw das element was abgefragt wurde einfach aus dem array löschen (ist ja nicht mehr der inhalt der datei selber sondern eine kopie). das wäre miene idee dazu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400244</guid><dc:creator><![CDATA[oelsni]]></dc:creator><pubDate>Fri, 09 Nov 2007 12:03:22 GMT</pubDate></item></channel></rss>