<?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[Probleme mit Zufallserzeugung]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich möchte mir ein kleines Programm zur Auswerten von Pokerhänden erstellen. Ich habe eine Klasse CardGame, die die Methode GetNextCard() enthält mit der zufällig eine Karte vergeben wird. Bis das Spiel mit der Methode Shuffle() neu gemischelt wird, wird keine Karte doppelt vergeben. Das funktioniert soweit auch ganz gut. Nun habe ich eine Datei mit Hilfsfunktionen, die die Karten auswerten soll und feststellt was man für eine Hand hat (Paar, Drilling usw). Da Kombinationen wie ein FullHouse oder besser nur sehr selten auftreten, habe ich mir noch eine Datei mit Testfunktionen erstellt. Eine dieser Funktionen gibt einen Vector mit 7 Werten zurück (ein Wert für jede Karte). Diese Funktion rufe ich so oft auf, bis die 7 Werte/ Karten die gewünschte Kombination haben (FullHouse usw). Zumindest soweit die Theorie. Leider erstellt diese Funktion immer die selben 7 Zufallszahlen. Wenn ich mein Kartenspiel ohne diese Testfunktion aufrufe funktioniert alles und ich bekomme auch jedesmal unterschiedliche Werte. Hier die wichtigsten Ausschnitte aus meinem Code.<br />
**<br />
Hier meine Funktion zum erzeugen der Zufallskarten**<br />
int cardGame::GetNextCard(){<br />
srand(time(NULL));<br />
bool bCardDealt = true;<br />
int iNewCard =-1;<br />
do{<br />
iNewCard = (rand() % 52);<br />
if (!baCardsDealt[iNewCard]){<br />
baCardsDealt[iNewCard]= true;<br />
bCardDealt = false;<br />
}<br />
}while(bCardDealt);<br />
return iNewCard;<br />
};</p>
<p><strong>Hier die Funktion die meine 7 Werte in einem Vektor anlegt und immer die selben Werte liefert:</strong><br />
vector &lt;int&gt; testSpiel(int iKartenAnzahl){<br />
// Vektor mit x Karten anlegen<br />
vector &lt;int&gt; vTestVektor;<br />
cardGame Testspiel;<br />
Testspiel.shuffle();<br />
for (int iCounter=0; iCounter &lt; iKartenAnzahl; iCounter++){<br />
vTestVektor.push_back(Testspiel.GetNextCard());<br />
cout &lt;&lt; &quot;zufall&quot; &lt;&lt; Testspiel.GetNextCard() &lt;&lt; endl;<br />
};<br />
return vTestVektor;<br />
};<br />
Irgendwie bin ich zu doof den Fehler zu finden....<br />
Vielleicht könnt ihr mir ja helfen. Vielen Dank schon mal im Vorraus.<br />
MfG</p>
<p>Meiwen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224627/probleme-mit-zufallserzeugung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 12:06:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224627.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Oct 2008 21:05:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Zufallserzeugung on Sun, 12 Oct 2008 21:05:41 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich möchte mir ein kleines Programm zur Auswerten von Pokerhänden erstellen. Ich habe eine Klasse CardGame, die die Methode GetNextCard() enthält mit der zufällig eine Karte vergeben wird. Bis das Spiel mit der Methode Shuffle() neu gemischelt wird, wird keine Karte doppelt vergeben. Das funktioniert soweit auch ganz gut. Nun habe ich eine Datei mit Hilfsfunktionen, die die Karten auswerten soll und feststellt was man für eine Hand hat (Paar, Drilling usw). Da Kombinationen wie ein FullHouse oder besser nur sehr selten auftreten, habe ich mir noch eine Datei mit Testfunktionen erstellt. Eine dieser Funktionen gibt einen Vector mit 7 Werten zurück (ein Wert für jede Karte). Diese Funktion rufe ich so oft auf, bis die 7 Werte/ Karten die gewünschte Kombination haben (FullHouse usw). Zumindest soweit die Theorie. Leider erstellt diese Funktion immer die selben 7 Zufallszahlen. Wenn ich mein Kartenspiel ohne diese Testfunktion aufrufe funktioniert alles und ich bekomme auch jedesmal unterschiedliche Werte. Hier die wichtigsten Ausschnitte aus meinem Code.<br />
**<br />
Hier meine Funktion zum erzeugen der Zufallskarten**<br />
int cardGame::GetNextCard(){<br />
srand(time(NULL));<br />
bool bCardDealt = true;<br />
int iNewCard =-1;<br />
do{<br />
iNewCard = (rand() % 52);<br />
if (!baCardsDealt[iNewCard]){<br />
baCardsDealt[iNewCard]= true;<br />
bCardDealt = false;<br />
}<br />
}while(bCardDealt);<br />
return iNewCard;<br />
};</p>
<p><strong>Hier die Funktion die meine 7 Werte in einem Vektor anlegt und immer die selben Werte liefert:</strong><br />
vector &lt;int&gt; testSpiel(int iKartenAnzahl){<br />
// Vektor mit x Karten anlegen<br />
vector &lt;int&gt; vTestVektor;<br />
cardGame Testspiel;<br />
Testspiel.shuffle();<br />
for (int iCounter=0; iCounter &lt; iKartenAnzahl; iCounter++){<br />
vTestVektor.push_back(Testspiel.GetNextCard());<br />
cout &lt;&lt; &quot;zufall&quot; &lt;&lt; Testspiel.GetNextCard() &lt;&lt; endl;<br />
};<br />
return vTestVektor;<br />
};<br />
Irgendwie bin ich zu doof den Fehler zu finden....<br />
Vielleicht könnt ihr mir ja helfen. Vielen Dank schon mal im Vorraus.<br />
MfG</p>
<p>Meiwen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597946</guid><dc:creator><![CDATA[meiwen]]></dc:creator><pubDate>Sun, 12 Oct 2008 21:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zufallserzeugung on Sun, 12 Oct 2008 21:16:06 GMT]]></title><description><![CDATA[<p>1. Bitte benutze die C/C++ Tags. Den Button dafür findet man gleich unter den Smilies, ganz links.<br />
2. Ich habe mir jetzt den Code nicht genau angeschaut, da er ohne C/C++ Tags und Einrückungen völlig unlerserlich ist. Ich erkenne aber in einer Funktion das folgende:</p>
<pre><code class="language-cpp">srand(time(NULL));
</code></pre>
<p><code>srand</code> muss man nur ein einziges Mal aufrufen, zum Beispiel beim Aufstarten des Programmes, danach ist es nicht unbenötig mehr nötig. <code>srand</code> setzt ein &quot;seed&quot;, also eine Zahl von der aus die Zufallszahlen berechnet wird. Wenn man das gleiche &quot;seed&quot; setzt, kommen auch die gleichen Zufallszahlen raus. Wenn deine Funktion nun schnell hintereinander aufgerufen wird, dann gibt <code>time(NULL)</code> jedes Mal die gleiche Zahl zurück und du bekommst die gleichen Zufallszahlen <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597951</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 12 Oct 2008 21:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zufallserzeugung on Mon, 13 Oct 2008 08:43:58 GMT]]></title><description><![CDATA[<p>Das hier hilft ev. auch weiter:</p>
<p><a href="http://magazin.c-plusplus.net/artikel/Zuf%E4lle%20gibt%60sFragezeichenAusrufezeichen%20-%20Funktionen%20rund%20um%20rand%2C%20Random%20und%20den%20Zufall" rel="nofollow">http://magazin.c-plusplus.net/artikel/Zuf�lle gibt`sFragezeichenAusrufezeichen - Funktionen rund um rand%2C Random und den Zufall</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598087</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 13 Oct 2008 08:43:58 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zufallserzeugung on Mon, 13 Oct 2008 17:53:04 GMT]]></title><description><![CDATA[<p>Hi Zusammen,</p>
<p>der Link brachte die Lösung.</p>
<blockquote>
<p>Viel hilft viel – nicht immer</p>
<p>Auf eine böse Falle will ich noch hinweisen, es handelt sich hier um einen beliebten Fehler, den man überraschend oft in Programmen findet. Wohlmeinende Programmierer setzen nämlich vor jeder Ziehung den Startwert aus der Zeit erneut. Werden aber nun Zahlen schneller gezogen als die Uhr tickt, erhalten Sie statt vieler unterschiedlicher Zahlen plötzlich immer den gleichen Wert. Das ist umso dramatischer, da time() ein Sekundentimer ist, und innerhalb einer Sekunde kann man ziemlich oft eine Zufallszahl ziehen.</p>
</blockquote>
<p>Vielen Dank</p>
<p>Meiwen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598398</guid><dc:creator><![CDATA[Meiwen]]></dc:creator><pubDate>Mon, 13 Oct 2008 17:53:04 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zufallserzeugung on Mon, 13 Oct 2008 18:11:31 GMT]]></title><description><![CDATA[<p>Um die Karten zu mischen, könntest du z.B. den STL-Algorithmus <code>std::random_shuffle</code> verwenden. Beim Nehmen einer neuen Karte könnte man dann nacheinander den Container verkleinern (oder den Index/Iterator verschieben, mit dem man anzeigt, welche Karten bereits genommen wurden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598403</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Oct 2008 18:11:31 GMT</pubDate></item></channel></rss>