Rand() pseudo Zufallszahl auf eine ausgabe begrenzen



  • Moin,
    Zu allererst nochmal ne kurze Anmerkung. Ich bin beim Thema C++ neu und deswegen bitte ich euch es mir nachzusehen, wenn ich etwas nicht auf Anhieb verstehe und einmal mehr nachfrage.

    Also folgendes. Ich bin grade dabei nen kleines Programm zu schreiben in dem man verschiedene Gamekeys über das Programm in eine .txt schreiben kann und mit dem man über einen Zufallsgenerator einen zufälligen Key anschließend ausgeben lassen kann und ggf. diesen anschließend wieder löschen kann aus der .txt.

    Das ganze ist auch vorerst so gut wie fertig, allerdings gibt es eine Ausschlaggebende Sache, die ich via google noch nicht lösen kann.
    Ich habe mir via srand() und rand() einen Zufallsgenerator zusammen gebastelt der auch funktioniert. Allserdings ist das Problem, dass dieser mir immer 10 Unterschiedliche Zahlen ausgibt. Nun möchte ich aber, dass mir nur eine einzelne Zufallszahl ausgegeben wird. Mit dieser Zufallszahl möchte ich dann Zeile X aus der .txt Dateil auslesen und anschließend ausgeben lassen.
    Hier der Code des ganzen:

    if (UserInput == 1) //ZufallsGen starten
    		{
    			system("cls");
    
    
    			std::cout << "Steamkey Zufallsgenerator\n";
    
    			std::ifstream file("keys.txt"); //Anzahl Keys auslesen und ausgeben
    
    			std::string zeile;
    			int AnzahlKeys = 0;
    
    			while (std::getline(file, zeile)) AnzahlKeys++;
    
    			std::cout << "Keys insgesamt: " << AnzahlKeys << std::endl;
    
    
    			srand(time(NULL));	//Zufallsgen
    
    			for (int i = 0; i < 10; i++)
    			{
    				int random = (rand() % AnzahlKeys) +1 ;
    			
    			std::cout << random << std::endl;
    			
    			}
    
    			//std::cout << std::endl << RAND_MAX % AnzahlKeys; 
    
    			system("pause");	// prints "press any key"
    		}
    

    Kann mir jemand sagen, wie ich jetzt z.B. nur die erste Zufallszahl in eine variable packen kann und die restlichen 9 Zahlen ignoriert werden?
    Greetz


  • Mod

    Lass die Schleife weg?



  • Die While Schleife weg lassen geht nicht, die hat damit auch nix direkt zu tund. Diese zählt bloß wie viele Zeilen in der .txt vorhanden sind und lass diese in der Zeile darunter auch als "Keys insgesamt: " ausgeben. Das brauche ich ja auch bei dem Generator selbst, da es keine feste Anzahl von Zeilen vorhanden sind und diese immer wieder variieren. Muss irgendwo dem Generator sagen können so und so viele Keys sind vorhanden und wähle von diesen einen aus. Bringt ja nix einen Zufälligen "Key" aus 20 auszuwählen, wenn nur 5 vorhanden sind.

    Allerdings hab ich mir den Code grad nochmal angeschaut und den Fehler selbst gefunden. Typischer Fall von Brett vorm Kopp. 🐕
    Bei dem Abschnitt for (int i = 0; i < 10; i++) gibt das "<10" an, wie viele zufällige Zahlen ausgegeben werden sollen. Nachdem ich den Wert von 10 auf 1 runter gestellt habe habe ich am Ende nur noch eine Aussage anstelle von 10.



  • @JoeJoke sagte in Rand() pseudo Zufallszahl auf eine ausgabe begrenzen:

    Die While Schleife weg lassen geht nicht,

    ?

    		for (int i = 0; i < 10; i++)
    			{
    				int random = (rand() % AnzahlKeys) +1 ;
    			
    			std::cout << random << std::endl;
    			
    			}
    


  • for (int i = 0; i < 10; i++) 
    {
        int random = (rand() % AnzahlKeys) +1 ;		
        std::cout << random << std::endl;
    }
    

    Was passiert hier.



  • @JoeJoke sagte in Rand() pseudo Zufallszahl auf eine ausgabe begrenzen:

    Allerdings hab ich mir den Code grad nochmal angeschaut und den Fehler selbst gefunden. Typischer Fall von Brett vorm Kopp. 🐕
    Bei dem Abschnitt for (int i = 0; i < 10; i++) gibt das "<10" an, wie viele zufällige Zahlen ausgegeben werden sollen. Nachdem ich den Wert von 10 auf 1 runter gestellt habe habe ich am Ende nur noch eine Aussage anstelle von 10.

    Weiterer Denkfehler bei dir:

    for (int i = 0; i < 1; i++)
    {
    	int random = (rand() % AnzahlKeys) + 1;
    			
    	std::cout << random << std::endl;
    }
    

    ist doch dasselbe wie

    int random = (rand() % AnzahlKeys) + 1;
    			
    std::cout << random << std::endl;
    

    (also: die Schleife weglassen)!



  • @Th69 sagte in Rand() pseudo Zufallszahl auf eine ausgabe begrenzen:

    ist doch dasselbe wie

    Stimmt, ist ein weiterer Denkfehler gewesen. Hatte mir den Zufalls Generator, zumindest das Grundgerüst, aus nem YT Tutorial mal raus kopiert und die Schleife nicht mehr richtig im Kopf gehabt. Die Schleife hatte nur was mit den ausgegebenen Zufallszahlen zu tun gehabt.
    Danke nochmal für eure Hilfe.



  • Deswegen nicht so viel aus YT Tutorials rauskopieren 🙂 Die Sachen verstehen und selbst coden. Und am besten auch ein bekanntes Lehrbuch nehmen und nicht irgendwelche YT Tutorials. Die sind meistens schlecht.


Anmelden zum Antworten