Anzeige

srand in Funktion


#1
Guten Abend,

ich möchte die rand Funktion in einer Funktion benutzten aber das klappt leider nicht so wie ich es programmiert habe, vielleicht könnt ihr mir ja weiter helfen bin noch ein ziemlicher Anfänger.

Hier der Code:

C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (void)
{
srand (time(NULL));   

int Anzahl =4;
int Ergebnisse[10];

    int Wuerfel_Initiative (int Anzahl)   
    {
        int lauf;
        for (lauf = 0; lauf >= Anzahl; ++lauf)
        {             
         Ergebnisse[lauf]= rand() % 8+1;     
         printf ("Die Würfelergebnisse sind %i\n",Ergebnisse[lauf]);
        }
    }

     return 0;
}
 

cwriter

Erfahrenes Mitglied
#2
Hi

ich möchte die rand Funktion in einer Funktion benutzten aber das klappt leider nicht so wie ich es programmiert habe, vielleicht könnt ihr mir ja weiter helfen bin noch ein ziemlicher Anfänger.
Du kannst keine verschachtelte Funktion definieren (zumindest nicht in C):
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int Wuerfel_Initiative (int Anzahl, int* Ergebnisse)   
{
    int lauf;
    for (lauf = 0; lauf <= Anzahl; ++lauf)
    {             
     Ergebnisse[lauf]= rand() % 8+1;     
     printf ("Die Würfelergebnisse sind %i\n",Ergebnisse[lauf]);
    }
}

int main (void)
{
    srand (time(NULL));   

    int Anzahl =4;
    int Ergebnisse[10];

    Wuerfel_Initiative(Anzahl, Ergebnisse);

     return 0;
}
Einige Fixes: lauf <= Anzahl, mit lauf >= Anzahl würde gar nichts laufen. Wenn du den Ergebnisse-Array auch in der main haben willst, musst du ihn als Parameter übergeben (hier als Pointer), wobei Anzahl strikt kleiner als die Zahl in den Klammern sein muss (Anzahl <= 10 in deinem Beispiel ist ok).

In diesem Beispiel war es recht einfach, den Fehler zu sehen, aber gewöhne dir doch dennoch an, den Compilerfehler mit anzugeben - das sorgt für weniger aufwändige Fehlersuche für uns :)

Gruss
cwriter
 

ComFreek

Mod | @comfreek
Moderator
#3
wobei Anzahl strikt kleiner als die Zahl in den Klammern sein muss (Anzahl <= 10 in deinem Beispiel ist ok).
Genau! Üblicherweise bezeichnet man mit anzahl/count/length/size/num_members die tatsächliche Anzahl der Arrayelemente. Im Code oben kann diese also maximal 10 werden. Aber dann wird es zu einem Schreiben außerhalb der Arraygrenzen kommen, da Wuerfel_Initiative eben folgenden Bug* hat: die for-Schleife iteriert von 0 bis Anzahl, beide Grenzen inklusive. Das sind (Anzahl + 1) Elemente!

*) Bug in dem Sinne, dass der Parametername Anzahl die tatsächliche Anzahl an Arrayelementen suggeriert und nicht diese minus 1.
 
Anzeige
Anzeige