Probleme mit Zufallszahl - Funktion



  • so gehts schrieb:

    while(...) {
      srand(time(0));
      i = rand();
    }
    

    Haha. Falsch.

    srand(time(0)); // nur einmal initialisieren.
    while(...)
    {
        i = rand % 6 + 1; // Zahl zwischen 1 und 6 ermitteln...
    }
    


  • sry, meinte nicht rand, sondern rand() 😉 auch ich mache mal Fehler.



  • Ryuzaki schrieb:

    so gehts schrieb:

    while(...) {
      srand(time(0));
      i = rand();
    }
    

    Haha. Falsch.

    srand(time(0)); // nur einmal initialisieren.
    while(...)
    {
        i = rand % 6 + 1; // Zahl zwischen 1 und 6 ermitteln...
    }
    

    anders sind die Zahlen zufälliger!



  • so gehts schrieb:

    anders sind die Zahlen zufälliger!

    aber du kannst dann nur einmal pro sekunde eine zahl abholen. bist du schnell, gibts die gleiche wie davor.
    🙂



  • so gehts schrieb:

    Ryuzaki schrieb:

    so gehts schrieb:

    while(...) {
      srand(time(0));
      i = rand();
    }
    

    Haha. Falsch.

    srand(time(0)); // nur einmal initialisieren.
    while(...)
    {
        i = rand % 6 + 1; // Zahl zwischen 1 und 6 ermitteln...
    }
    

    anders sind die Zahlen zufälliger!

    Nein. Überhaupt nicht zufälliger. Erzähl hier bitte keinen Unfug.



  • Mein Problem war, das der net die 6 ausgibt, wenn sie gewürfelt wird. Meine Würfelfunktion hat wohl gestimmt, den ich habe es auserhalb des switch cases nochmal probiert und das ging.

    Liegt der Fehler vielleicht im switch case??

    Das blöde ist halt, es wird schon kompilliert und habe deshalb keinen Error, der mir weiterhelfen könnte.



  • floorball92 schrieb:

    Mein Problem war, das der net die 6 ausgibt, wenn sie gewürfelt wird. Meine Würfelfunktion hat wohl gestimmt, den ich habe es auserhalb des switch cases nochmal probiert und das ging.

    Liegt der Fehler vielleicht im switch case??

    Das blöde ist halt, es wird schon kompilliert und habe deshalb keinen Error, der mir weiterhelfen könnte.

    Schön, dann zeig doch mal bitte ein möglichst kurzes, komplierbares Beispiel, das den Fehler hat (und bitte 1:1 copy&pasten!).

    So ist das nämlich sehr undurchsichtig:
    - Funktioniert dein rand?
    - Sind alle Variablen richtig benannt? Verdeckst Du vielleicht irgendeine Variable (dice mehrfach in verschiedenen Scopes angelegt? Warum überhaupt ausserhalb von wuerfel?).
    - Wird wuerfel überhaupt aufgerufen? Wo wird der Rückgabewert abgelegt?
    - usw.

    Das alles geht aus deinem Beispielprogramm nicht hervor, darum kann man dir so nicht wirklich helfen, sondern nur rumraten.



  • floorball92 schrieb:

    Mein Problem war, das der net die 6 ausgibt, wenn sie gewürfelt wird. Meine Würfelfunktion hat wohl gestimmt, den ich habe es auserhalb des switch cases nochmal probiert und das ging.

    Dein Problem war oder ist?

    floorball92 schrieb:

    Liegt der Fehler vielleicht im switch case??

    Keine Glaskugel.

    floorball92 schrieb:

    Das blöde ist halt, es wird schon kompilliert und habe deshalb keinen Error, der mir weiterhelfen könnte.

    Der Debugger hilft bestimmt.

    greetz, Swordfish



  • das ist meine momentane Fassung ( müsst includes elber einfügen, da ich in ner SDK für ein anderes System und anderen Libs arbeite ( die verwendeten Befehle sind aber gleich mit PC Programmierung ):

    int spieler[4], dice; /* Spieler wird jetzt hier ent verwendet, kommt aber noch vor und steht deshalb da */
    
    // wuerfel funktion
    int wuerfel()
    {
    dice = rand(1,6);
    return dice;
    }
    
    // main funktion
    int main() 
    {
    
    	while(1)
    		{
         switch( wuerfel() )
         {
            case 6 : printf( "6 \n" );    
            default  : printf( "nicht 6 \n" );
         }	
    }
    

    Debugger gibts da auch net.
    rand funzt, habe mal

    printf("%i", wuerfel());
    

    in den Mainloop eingegeben und das hat gefunzt.

    Habe ich jetzt alle Infos gegeben??



  • floorball92 schrieb:

    int wuerfel( void /* <- fehlt hier */ )
    {
    	dice = rand(1,6); /* ist in dieser Form nicht Standard C */
    	return dice;
    }
    
    int main( void /* <- hier auch */ )
    {
    	while(1)
    	{
    		switch( wuerfel() )
    		{
    			case 6:
    				printf( "6 \n" );
    				break; /* <- fehlt hier */
    
    				default:
    				printf( "nicht 6 \n" );
    		}   
    	}
    } /* <- fehlt. Hoffentlich ein Copy&Paste-Fehler... */
    

    floorball92 schrieb:

    als erstes habe ich dice als globale int Variable initialisiert.

    Hier ist keine Definition ("Initialisierung") von dice , lediglich eine Deklaration.

    Darf man Fragen, warum Du nicht die Standard rand( ) verwendest? Für welches System programmierst Du denn? Muss man den Zufallszahlengenerator dieses SDK nicht initialisieren?

    greetz, Swordfish



  • für PSP. Habe jetzt aber den Fehler gefunden, habe ein ' vergessen, danke trotzdem euch allen.


Anmelden zum Antworten