Zufallszahlen Problem

So hier ist nochmal der ganze Code ;)
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define hoechste_zielzahl 150
#define niedrigste_zielzahl 30

int irand( int a, int e)
{
    double r = e - a + 1;
    return a + (int)(r * rand()/(RAND_MAX+1.0));
}

 unsigned int Computerzug (unsigned int max, unsigned int ziel, unsigned int Derzeit_zahl)
{
    unsigned int ergebnis_zz, hoechste_eingabe, zw_ergebnis;

    if ((max - ziel - Derzeit_zahl) < max)
    {
        return (max - Derzeit_zahl);
    }
        else for (zw_ergebnis = ziel; zw_ergebnis >= 0; zw_ergebnis = (ziel - (max + 1)))

        if ((ziel - zw_ergebnis) == 0)
        {
              return irand(1, max);   /* Eine Zufallszahl, die kleiner oder gleich max sein muss! */
        }

        else return zw_ergebnis;
}

int main()
{
    unsigned int max = 0, ziel = 0, spieler_zug = 0, derzeit_zahl = 0, zugergebnis = 0, niedrigste_eingabe = 0, hoechste_eingabe = 0;

    ziel = irand(niedrigste_zielzahl, hoechste_zielzahl);
    niedrigste_eingabe = ziel/10;
    hoechste_eingabe = ziel/4;
    max = irand (niedrigste_eingabe, hoechste_eingabe);

    printf ("%43s\n\n\n", "Arithmo");
    printf ("%-45s%2u", "     Hoechste Zahl, die man eingeben darf: ", max);
    printf ("%25s%3u", "Zielzahl: ", ziel);
    printf ("\n\n");

    while (zugergebnis != ziel)
    {
        printf ("Bitte geben Sie eine Zahl von 1 bis %d ein: ", max);
        scanf ("%d", spieler_zug);

        if (spieler_zug > max || spieler_zug < 1)
        continue;
    }
    return EXIT_SUCCESS;
}
 
Das ist die Funktion:

Code:
int irand( int a, int e)
{
    srand(time(0));

    double r = e - a + 1;
    return a + (int)(r * rand()/(RAND_MAX+1.0));
}
 
C++:
ziel = irand(niedrigste_zielzahl, hoechste_zielzahl);
    niedrigste_eingabe = ziel/10;
    hoechste_eingabe = ziel/4;
    max = irand (niedrigste_eingabe, hoechste_eingabe);

Das sind die einzigen zwei irand, die bei dir zurzeit ausgeführt werden.
Die vier Zeilen werden schneller als eine Sekunde abgearbeitet, also initialisierst du beim zweiten srand (mistens) wieder mit dem gleichen Wert wie beim Ersten.

Nimm das srand aus der Funktion raus und setz es an den Anfang von main. Da wird es genau einmal aufgerufen, so wie es ein soll.

Gruß
 
Doch, die erste Zufallszahl ändert sich auch, aber ziemlich langsam und zeitabhängig.
Ruf einfach gleich nach dem srand noch ein rand(); auf, damit du die erste überspringst.

Gruß
 

Neue Beiträge

Zurück