<?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[&amp;quot;Zahlenraten&amp;quot; - Eine vorher eingegebene Zahl erkennen]]></title><description><![CDATA[<p>Hallo c-plusplus-Community!</p>
<p>Ich, Programmieranfänger, bin gerade dabei eine Spiel zu programmieren.<br />
Der Benutzer soll die generierte Zahl erraten.</p>
<p>Hier eben der Code:</p>
<pre><code>[include]
...
Mainprogramm()
{
Start:
char NeuesSpiel;
int zahl,i,versuche=0;
srand((unsigned) time(NULL)); // Initialisieren des Zufallszahlengenerators
zahl = rand() %10 + 1;

cout &lt;&lt; &quot;Zahlenerraten&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Erraten sie die per Zufall generierte Zahl von 1 bis 10!&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Sie haben 5 Versuche&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Geben Sie eine Zahl ein: &quot;;

Anfang:
versuche++;
cin &gt;&gt; i;

if(i==zahl)  //Zahl erraten
{
cout &lt;&lt; &quot;Sie haben richtig gerraten!&quot; &lt;&lt; endl;
cout &lt;&lt; versuche &lt;&lt;&quot; Versuche wurden benoetigt!&quot; &lt;&lt; endl;
if(versuche&gt;1)
{
cout &lt;&lt; &quot;Das geht noch besser!&quot; &lt;&lt; endl;
}
else
{
cout &lt;&lt; &quot;Super! Besser geht es nicht!&quot; &lt;&lt; endl;
}
}

if(i&gt;zahl)  //eingegebene Zahl zu groß
{
cout &lt;&lt; i &lt;&lt; &quot; ist zu gross und somit falsch&quot; &lt;&lt; endl;
if(versuche&gt;=5)
{
cout &lt;&lt; &quot;Sie haben alle 5 Versuche versagt!&quot;;
}
else
{
goto Anfang;
}
}

if(i&lt;zahl)  //eingegebene Zahl zu klein
{
cout&lt;&lt; i &lt;&lt; &quot; ist zu klein und somit falsch&quot; &lt;&lt; endl;
if(versuche&gt;=5)
{
cout &lt;&lt; &quot;Sie haben alle 5 Versuche versagt!&quot;;
}
else
{
goto Anfang;
}
}

cout &lt;&lt; &quot;Wollen Sie nochmal spielen? (j/n)&quot; &lt;&lt; endl;
cin &gt;&gt; NeuesSpiel;

if (NeuesSpiel == 'j')
{
goto Start;
}
else
{
system(&quot;PAUSE&quot;);
}
</code></pre>
<p>Bin fast schon fertig - mir fehlen &quot;nur noch&quot; 2 Sachen.<br />
Und zwar möchte ich, dass mein Programm eine zuvor eingegebene Zahl erkennt.<br />
Da habe ich's mit einer if-Schleife versucht, leider ohne Erfolg.<br />
Versuch war in etwa:</p>
<pre><code>if((versuche=1(i)) == (versuche=2)(i))
{
cout &lt;&lt; &quot;Zahl wurde schon einmal eingegeben!&quot; &lt;&lt; endl;
}
</code></pre>
<p>Problem ist halt, wie &quot;sage&quot; ich dem Programm, dass er einfach schauen soll, ob i im ersten Versuch gleich i im zweiten Versuch ist (dann für alle 5 Versuche - bisschen &quot;Schreibarbeit&quot; lol)</p>
<p>Und Zweitens:<br />
Wie erkennt mein Programm, ob die Eingabe wirklich eine Zahl ist und kein Buchstabe / Sonderzeichen? Da habe ich leider kein Plan.</p>
<p>Könnt Ihr mir auf die Sprünge helfen?</p>
<p>lg<br />
fener000</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321559/quot-zahlenraten-quot-eine-vorher-eingegebene-zahl-erkennen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 03:36:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321559.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Nov 2013 11:13:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;Zahlenraten&amp;quot; - Eine vorher eingegebene Zahl erkennen on Sat, 16 Nov 2013 11:15:03 GMT]]></title><description><![CDATA[<p>Hallo c-plusplus-Community!</p>
<p>Ich, Programmieranfänger, bin gerade dabei eine Spiel zu programmieren.<br />
Der Benutzer soll die generierte Zahl erraten.</p>
<p>Hier eben der Code:</p>
<pre><code>[include]
...
Mainprogramm()
{
Start:
char NeuesSpiel;
int zahl,i,versuche=0;
srand((unsigned) time(NULL)); // Initialisieren des Zufallszahlengenerators
zahl = rand() %10 + 1;

cout &lt;&lt; &quot;Zahlenerraten&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Erraten sie die per Zufall generierte Zahl von 1 bis 10!&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Sie haben 5 Versuche&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Geben Sie eine Zahl ein: &quot;;

Anfang:
versuche++;
cin &gt;&gt; i;

if(i==zahl)  //Zahl erraten
{
cout &lt;&lt; &quot;Sie haben richtig gerraten!&quot; &lt;&lt; endl;
cout &lt;&lt; versuche &lt;&lt;&quot; Versuche wurden benoetigt!&quot; &lt;&lt; endl;
if(versuche&gt;1)
{
cout &lt;&lt; &quot;Das geht noch besser!&quot; &lt;&lt; endl;
}
else
{
cout &lt;&lt; &quot;Super! Besser geht es nicht!&quot; &lt;&lt; endl;
}
}

if(i&gt;zahl)  //eingegebene Zahl zu groß
{
cout &lt;&lt; i &lt;&lt; &quot; ist zu gross und somit falsch&quot; &lt;&lt; endl;
if(versuche&gt;=5)
{
cout &lt;&lt; &quot;Sie haben alle 5 Versuche versagt!&quot;;
}
else
{
goto Anfang;
}
}

if(i&lt;zahl)  //eingegebene Zahl zu klein
{
cout&lt;&lt; i &lt;&lt; &quot; ist zu klein und somit falsch&quot; &lt;&lt; endl;
if(versuche&gt;=5)
{
cout &lt;&lt; &quot;Sie haben alle 5 Versuche versagt!&quot;;
}
else
{
goto Anfang;
}
}

cout &lt;&lt; &quot;Wollen Sie nochmal spielen? (j/n)&quot; &lt;&lt; endl;
cin &gt;&gt; NeuesSpiel;

if (NeuesSpiel == 'j')
{
goto Start;
}
else
{
system(&quot;PAUSE&quot;);
}
</code></pre>
<p>Bin fast schon fertig - mir fehlen &quot;nur noch&quot; 2 Sachen.<br />
Und zwar möchte ich, dass mein Programm eine zuvor eingegebene Zahl erkennt.<br />
Da habe ich's mit einer if-Schleife versucht, leider ohne Erfolg.<br />
Versuch war in etwa:</p>
<pre><code>if((versuche=1(i)) == (versuche=2)(i))
{
cout &lt;&lt; &quot;Zahl wurde schon einmal eingegeben!&quot; &lt;&lt; endl;
}
</code></pre>
<p>Problem ist halt, wie &quot;sage&quot; ich dem Programm, dass er einfach schauen soll, ob i im ersten Versuch gleich i im zweiten Versuch ist (dann für alle 5 Versuche - bisschen &quot;Schreibarbeit&quot; lol)</p>
<p>Und Zweitens:<br />
Wie erkennt mein Programm, ob die Eingabe wirklich eine Zahl ist und kein Buchstabe / Sonderzeichen? Da habe ich leider kein Plan.</p>
<p>Könnt Ihr mir auf die Sprünge helfen?</p>
<p>lg<br />
fener000</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365828</guid><dc:creator><![CDATA[fener000]]></dc:creator><pubDate>Sat, 16 Nov 2013 11:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Zahlenraten&amp;quot; - Eine vorher eingegebene Zahl erkennen on Sat, 16 Nov 2013 12:06:43 GMT]]></title><description><![CDATA[<blockquote>
<p>Versuch war in etwa: [...Blödsinn...]</p>
</blockquote>
<p>Bitte nicht wahllos irgendwelche Zeichen irgendwie zusammenschustern.<br />
Kritik am Code:</p>
<ul>
<li><code>goto</code> und Labels solltest du durch Schleifen ersetzen.</li>
<li>Variablen erst da deklarieren, wo du sie brauchst.</li>
<li>Wieso hast du überall <code>endl</code> stehen, wo du nur einen Zeilenumbruch willst?</li>
</ul>
<blockquote>
<p>Wie erkennt mein Programm, ob die Eingabe wirklich eine Zahl ist und kein Buchstabe / Sonderzeichen? Da habe ich leider kein Plan.</p>
</blockquote>
<p>In dem du den Fehlerzustand von cin prüfst.</p>
<p>Ich habe alles eingebaut, was du wolltest, und es grundlegend verbessert:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;set&gt;
#include &lt;limits&gt;
#include &lt;ctime&gt;
#include &lt;cstdlib&gt;

int main()
{
	using std::cout;
	using std::cin;

	srand(time(NULL));

	for(;;)
	{
		unsigned const zahl = rand() %10 + 1;

		cout &lt;&lt; &quot;Geben Sie eine Zahl ein: &quot;;

		std::set&lt;unsigned&gt; bisherigeVersuche;
		for(unsigned versuche = 1;; )
		{
			unsigned i;

			if( !(cin &gt;&gt; i) )
			{
				cout &lt;&lt; &quot;Falsche Eingabe! Nochmal: &quot;;
				cin.clear(); // Fehlerstatus zurücksetzen
				cin.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' ); // Alle falschen Zeichen aus dem Buffer entfernen
				continue;
			}
			// Bereits im set vorhanden
			if( !bisherigeVersuche.insert(i).second )
			{
				cout &lt;&lt; &quot;Diese Zahl wurde schon einmal eingegeben! Eine andere, bitte: &quot;;
				continue;
			}

			if( i == zahl )
			{
				cout &lt;&lt; &quot;Sie haben richtig gerraten!\n&quot;
				     &lt;&lt; versuche &lt;&lt;&quot; Versuche wurden benoetigt!\n&quot;
				     &lt;&lt; ( versuche &gt; 1 ? &quot;Das geht noch besser!&quot; : &quot;Super! Besser geht es nicht!&quot; ) &lt;&lt; '\n';

				break;
			}
			else
			{
				cout &lt;&lt; &quot;i ist zu &quot; &lt;&lt; (i &gt; zahl? &quot;gross&quot; : &quot;klein&quot;) &lt;&lt; &quot;!\n&quot;;
				if( versuche &gt;= 5 )
				{
					cout &lt;&lt; &quot;Sie haben alle 5 Versuche versagt!\n&quot;;
					break;
				}
			}
			++versuche;
		}

		cout &lt;&lt; &quot;Wollen Sie nochmal spielen? (j/*)\n&quot;;
		if( (cin &gt;&gt; std::ws).get() != 'j' )
			break;
	}
}
</code></pre>
<p>Edit: Zwei Fehler behoben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365831</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 16 Nov 2013 12:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Zahlenraten&amp;quot; - Eine vorher eingegebene Zahl erkennen on Sat, 16 Nov 2013 12:32:31 GMT]]></title><description><![CDATA[<p>Erst einmal Riesendank Arcoth, dass du dir die Mühe gemacht hast, mir zu helfen.<br />
goto's durch Schleifen ersetzen - das muss ich mir wohl einprägen und in der Zukunft umsetzen.<br />
Zeilenumbruch durch &quot;\n&quot; - war bekannt, aber &quot;endl&quot; verwendet, da ich<br />
den Unterschied nicht wirklich kenne,<br />
Das mit der falschen Eingabe und zuvor eingegebene Zahl erkennen - zwar ist das Problem so gelöst, aber die &quot;Befehle&quot; kenne ich nicht wirklich.<br />
So könnte ich sie zwar in mein Programm übernehmen, aber in der Zukunft nicht anwenden können.</p>
<p>Ich muss zugeben, mir fehlt viel an Wissen in C++, da wir das Programmieren in der Schule erst seit wenigen Wochen behandeln. Es macht mir eigentlich Spaß und ich würde auch gerne in meiner Freizeit dazulernen.<br />
Nur was könntet ihr mir da empfehlen? Vllt. ein Buch für Einsteiger wie mich - welches nach einer logischen Reihenfolge lehrt?<br />
Könnt ihr mir da vllt. Ratschläge geben?</p>
<p>lg<br />
fener000</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365833</guid><dc:creator><![CDATA[fener000]]></dc:creator><pubDate>Sat, 16 Nov 2013 12:32:31 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Zahlenraten&amp;quot; - Eine vorher eingegebene Zahl erkennen on Sat, 16 Nov 2013 14:41:04 GMT]]></title><description><![CDATA[<blockquote>
<p>Vllt. ein Buch für Einsteiger wie mich - welches nach einer logischen Reihenfolge lehrt?</p>
</blockquote>
<p>Schön, dass du das direkt ansprichst. Ja, der einzige Weg C++ vernünftig zu lernen, besteht in einem Grundlagenbuch. Schau dir mal folgenden Thread an, da sind die wichtigsten Bücher: <a href="http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list" rel="nofollow">http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list</a> (Schau unter 'Beginner')<br />
Ich empfehle dir den C++-Primer, das ist der Platzhirsch der Grundlagenbücher. Leider ist die neueste Version nicht übersetzt erhältlich (zumindest nicht auf Amazon).</p>
<blockquote>
<p>Zeilenumbruch durch &quot;\n&quot; - war bekannt, aber &quot;endl&quot; verwendet, da ich den Unterschied nicht wirklich kenne,</p>
</blockquote>
<p>Der ist einfach: Alle Zeichen, die in der Konsole landen sollen, nachdem sie durch <code>cout</code> 'ausgegeben' wurden, werden erst zwischengespeichert. Mit endl teilst du dem Streambuffer mit, dass er alle zwischengespeicherten Zeichen <strong>und einen Zeilenumbruch</strong> jetzt nach stdin (und damit auf die Konsole) weiterleiten soll - diesen Vorgang (der zusätzliche Zeilenumbruch gehört natürlich standardmäßig nicht dazu) nennt man flushen. <code>std::flush</code> macht dasselbe, nur ohne den Zeilenumbruch.</p>
<p>Nun brauchst du auf Windows diesen Flush nicht. Daher reicht ein einfaches <code>'\n'</code> .</p>
<blockquote>
<p>aber die &quot;Befehle&quot; kenne ich nicht wirklich.</p>
</blockquote>
<p>Das ist natürlich ungünstig. <code>std::set</code> ist ein Container, der alle eingefügten Elemente automatisch sortiert und Duplikate entfernt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365846</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 16 Nov 2013 14:41:04 GMT</pubDate></item></channel></rss>