Rand()



  • Hallo zusammen,
    ich habe wohl eine, für euch, leicht zu lösende Frage.
    Ich würde einfach gerne eine Zufallszahl erzeugen... (oder mehrere...)

    Ich wollte das ganze so Lösen :

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
    	int x = rand();
    	for(int i; i<2; i++)
    	{
    		i--;
    		cout << x << endl;
    	}
    
    	return 0;
    }
    

    Aber leider kommt bei mir da immer und immer wieder die Zahl 41 herraus.
    Habe auch schon etwas über Srand() gelesen, funktioniert aber auch nicht so richtig.
    Wäre nett, wenn ihr mir helfen könntet.
    Danke...



  • Da hast du aber noch mehr Probleme in deinem Code. Du initialisierst den Schleifenindex i nicht, außerdem wird er im Schleifenrumpf um 1 vermindert und am Schleifenende wieder um 1 erhöht -> Endlosschleife.

    Und schlussendlich gibst du in der Schleife immer nur die vor der Schleife erzeugte Zufallsfahl aus, du änderst also an der einmal erzeugten Zahl nichts.



  • Ja ich weiss das das ne Endlosschleife ist, soll es ja auch sein...
    aber ich versteh nicht: Ich kann das Programm so oft öffnen wie ich will, es kommt immer 41 herraus...



  • Dann verstehe ich das Konstrukt nicht wirklich. Sinn macht das irgendwie keinen... 🙂

    Zu deinem eigentlichen Problem: die Funktion gibt keine wirkliche Zufallszahl zurück, sondern einen berechneten Wert. Um einen Wert zu berechnen, braucht man einen Ausgangswert. Und der ist bei der Funktion immer derselbe, deshalb ist auch das Ergebnis immer dasselbe.



  • Mh also ich brauch die Zufallszahl, um ein Spiel zu Programmieren.
    also versuchte ich erst mal so, etwas mit den Zufallszahlen zurechtzukeommen, und wollte einfach mal unendlich viele und unterschiedliche Zahlen ausgeben... : D
    und wie kann ich dann machen, dass das immer eine andere Zahl ergibt???



  • Mit srand() warst du schon auf der richtigen Spur. Versuch mal, hier im Forum was zu finden. 🙂

    Dann gilt aber immer noch, was ich oben geschrieben habe: Du veränderst x gar nicht in der Schleife. Du weist nur einmal eine Zufallszahl zu und gibst diese eine Zahl einfach nur endlos aus. Würdest du die Zufallszahl immer neu erstellen, würdest du auch eine endlose Folge von Zufallszahlen bekommen.

    Ohne srand() wäre dann nur noch diese Folge bei jedem Programmstart dieselbe.



  • Mh okay... ich hab das jetzt so gelöst :

    srand(static_cast<unsigned>( time(0) ) );
    	cout << rand() << endl;
    

    Das funktioniert auch so weit so gut...
    aber wenn ich das begrenzen möchte, und zwar so :

    srand(static_cast<unsigned>( time(0) ) );
    	cout << rand() %10 +1 << endl;
    

    Dann geht es nicht mher...



  • Mh okay... keine ahnung warum aber jetzt gets...

    villeicht, weil mein PC übervordert war : D systemauslastung war bei 100% : D

    naja ok... ich hätta da aber noch eine andere Frage:

    und zwar ist es möglich, wenn ich einen char array habe aber nicht alle "felder" belegt habe, zu zählen, wie viele "Felder" belegt sind???

    also wie z.B. bei strings diese funktion :

    #include <string.h> //bin mir nicht mehr ganz sicher ob es diese libery war...
    
    int main()
    {
        string x = halloxy;
        int anzahlderbuchstaben;
        string.size(anzahlderbuchstaben);
        return 0;
    }
    
    /* Weiss nicht mehr ob es so war... aber so irgendwie... */
    

    Und ob das hallt auch mit einem char arry geht...



  • Ach nee sorry (zu zeile 😎 das war:

    anzahlderbuchstaben = x.size();
    


  • Mh ja... das würde mich auch mal interresieren...



  • Wenn du das Array vorher initialisierst, ja.
    Wenn der String der in dem Array steht Nullterminiert ist ebenfalls 😉
    Ansonsten wird es schwierig zu entscheiden, ob die Zelle von dir belegt wurde oder irgendein Zufallswert drin steht...

    Viele Grüße



  • Okay, habe jetzt nur den ersten Beitrag gelesen, deshalb weiß ich nicht, ob das Problem schon gelöst ist. Eine Zufallszahl erzeuge ich so:

    #include <iostream>
    #include <Windows.h>
    
    using namespace std;
    #pragma comment (lib, "winmm.lib")
    
    int main ()
    {
    	// initialize random generator
    	srand (timeGetTime ());			// Würdest Du diese Zeile weglassen, wäre Deine Zufallszahl immer die Selbe
    
    	// initialize random number
    	//
    	int random_number = (rand ()%105)+10;	// Es wird eine zufällige Zahl zwischen 10 und 105 gesucht
    
    	// show random number
    	cout << random_number << endl;
    	system ("pause");
    
    	return 0;
    }
    

Anmelden zum Antworten