Lotto-Schleife zieht selbe zahlen...
-
Ohne den Inhalt deines Beitrags gründlich gelesen zu haben:
- Es gibt zig Lottozahlen-Threads hier und überall sonst wo
- Es gibt so etwas wie Debugger, mit denen man Fehler finden kannZeig mal 'n bissel Eigeninitiative.
-
Ersetze die Zeilen 14-21 durch folgendes:
for( int j=0; j<i; ++j ) //'Abfrage' Schleife. Alle lotto[j], für die j<i ist, vergleichen { if( lotto[i] == lotto[j] ) //Abfrage ob Zahl doppelt gezogen wurde. { --i; break; } }alles klar?
-
Ohh Verdammt. xD
Okay, Fehler 1 hab ich gefunden Zeile sieht jetzt so aus:
for(loop; loop == 6; loop++)Aber zahlen kommen immer noch doppelt vor, auch wenn ich das auf 7 setze

-
Okay, jetzt funktioniert es. Und meinen Fehler hab ich auch entdeckt. Musste anstatt loop == 6 in der Schleife einfach loop < i bzw. j < i ...
Na toll -.-Vielen Dank für die sehr schnelle Hilfe

-
Wenn du erst eine Lottozahl erzeugt hast ( i == 0 ), warum willst du dann über das komplette Array von 0 bis 5 drüber laufen? In den anderen steht doch noch garnix ( sinnvolles ) drin.
-
Übrigens: <time.h> ist kein C++, sondern C.
In C++ heißt der Header <ctime>, die Funktionen sind dann alle im namespace std.
_tmain und _TCHAR sind auch kein Standard - ich schätze mal WinAPI.
Wenn du grade erst anfängst wäre es vielleicht sinnvoll dich erstmal mit den Standard-Funktionalitäten vertraut zu machen, statt irgendwelche Plattform/Compilerspezifischen Dinge zu nutzen. Sonst siehst man später lange Zeit nicht durch, was jetzt portabel ist und was nicht.
-
Nunja...
Beide dinge so wohl das <time.h> als auch das " TCHAR* " was Visual Studio dort einfügt hab ich von meinem Programmier Lehrer aus der Schule. Ich mache zurzeit eine Schulische Ausbildung zum Informationstechnischen-Assistenten und er hatte uns die so gezeigt^^.
-
und wenn du einen Zähler nur in der For-Schleife benötigst und außerhalb nicht mehr, dann mach das so:
for ( int i = 0; i < 6; ++i )Dann ist dieser Zähler außerhalb der Schleife nicht mehr gültig.
-
Damit die Verwirrung nicht zu gross wird

Hat also mit WinAPI nichts zu tun <- _tmain
MfG f.-th.
-
Wieso immer alle diese Prüfung machen, ob eine Zahl schon gezogen wurde? Mach' es doch besser wie der Lottoautomat:
Es gibt jede Zahl genau einmal (also ein Array mit den Zahlenwerten 1..49), dann die Zahlen mischen (einmal durch das Array laufen, und die Zahl an Index i mit der Zahl an einem zufälligen Index k tauschen), dann die ersten 6 Zahlen wählen. Fertig!
Tipp: Das ist es noch nicht ganz, denn es wird normalerweise zwischen jeder Ziehung gemischt.
-
#include <iostream> #include <ctime> int main() { size_t zahlen[49]; srand(static_cast<unsigned int>(time(NULL))); // Initialisieren for (size_t i = 0; i < 49; ++i) { zahlen[i] = i + 1; } // Mischen for (size_t i = 0; i < 49; ++i) { if (rand() % 2) { std::swap(zahlen[i], zahlen[rand() % 48]); } } // Ausgabe for (size_t i = 0; i < 6; ++i) { std::cout << i + 1 << ". " << zahlen[i] << std::endl; } return 0; }
-
#include <set> #include <iostream> #include <ctime> int main() { srand(time(NULL)); std::set <int> zahlen; // Ziehen while(zahlen.size() < 6) zahlen.insert(rand()%49+1); // Ausgabe for (std::set<int>::iterator it=zahlen.begin() ; it != zahlen.end(); ++it ) std::cout << " " << *it; }alternativ
std::vector<int>füllen und mitstd::random_shuffle(...)mischen, dann die ersten 6 Ausgeben