C Funktion in einer Schleife ausführen (Funktion wird nur 1 mal ausgeführt)

Dieses Thema im Forum "C/C++" wurde erstellt von maxpain, 25.02.2007.

  1. #1 maxpain, 25.02.2007
    maxpain

    maxpain Guest

    Es handelt sich um eine Funktion die Zufallszahlen erzeugt. Nun möchte ich diese Funktion mehrmals ausführen damit X verschiedene Zahlen erzeugt werden, das X steht für die Anzahl der zu erzeugenden Zahlen. Nun ist es aber das ich, wenn ich die Funktion in einem C programm, in einer Schleife ausführe, wird X mal das selbe Ergebniss angezeigt, wenn ich es jedoch im C++ Stil schreibe werden X verschiedene Zahlen erzeugt. Vielleicht hab ich auch nur was übersehen, kann mir trozdem jemand einen Tipp geben warum es so ist wie es im moment ist?

    Hier der Code:

    In C wo X mal die selbe Zahl ausgegeben wird
    Code:
    /*
     *  ZUFALL.C
     *
     *
     */
    
     #include <cstdio>
     #include <ctime>
     #include <cstdlib>
    
     short zufall(short, short, double);
     short zufall(short min, short max, double delay)
     {
       short z_zahl = 0u;
       time_t start, stop;
       
       time(&start);
       do
       {
        time(&stop);
       }while(difftime(stop, start) < delay);
    
       srand((unsigned) time(NULL));
       do               
       {
        z_zahl = rand();
       }while((z_zahl<min)||(z_zahl>max));
      
       return z_zahl;
     }
    
     int main(int argc, char** argv)
     {
      short min = 0u, max = 0u, i = 0u;
      double verz = 0.0l;
      
      printf("Zufallszahlengenerator\n");
    
      printf("Minimale Zufallszahl Bereichszahl eingeben: ");
      scanf("%u", &min);
    
      printf("Maximale Zufallszahl Bereichszahl eingeben: ");
      scanf("%u", &max);
    
      printf("Verzoegerung eingeben: ");
      scanf("%.2f", &verz);
    
      for(short i = 0; i < 7; i++)
       printf("%u\n", zufall(min, max, verz));
    
      system("pause");
    
      return 0;
     }
    
    Das selbe Programm in C++, nur hier werden X verschiedene Zahlen ausgegeben
    Code:
    /*
     *  ZUFALL.CPP
     *
     *
     */
     
     #include <iostream>
     #include <ctime>
     #include <cstdlib>
     
     using namespace std;
    
     short zufall(short, short, double);
     short zufall(short min, short max, double delay)
     {
       short z_zahl = 0u;
       time_t start, stop;
       
       time(&start);
       do
       {
        time(&stop);
       }while(difftime(stop, start) < delay);
    
       srand((unsigned) time(NULL));
       do               
       {
        z_zahl = rand();
       }while((z_zahl<min)||(z_zahl>max));
      
       return z_zahl;
     }
    
     int main(int argc, char* argv[])
     {
      short min = 0u, max = 0u, i = 0u;
      double verz = 0.0l;
      
      cout << "Zufallszahlengenerator" << endl;
    
      cout << "Minimale Zufallszahl Bereichszahl eingeben: ";
      cin >> min;
    
      cout << "Maximale Zufallszahl Bereichszahl eingeben: ";
      cin >> max;
    
      cout << "Verzoegerung eingeben: ";
      cin >> verz;
    
      for(short i = 0; i < 7; i++)
       cout << zufall(min, max, verz) << endl;
    
      system("pause");
    
      return 0;
     }
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    srand solltest Du nur einmal in Deinem Programm aufrufen, zum Beispiel innerhalb Deiner main. Gib doch mal das Ergebnis von srand und den Wert seines Argumentes bei jedem Durchlauf an. Optimierst Du? Vielleicht sorgt die Optimierung dafuer, dass immer wieder gleich initialisiert wird.

    P.S.: Es gibt eine 'sleep' Funktion, die im Gegensatz zu Deiner Warte-Implementierung wohl keine CPU-Zeit verbrauchen duerfte.
     
  4. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Die Qualitaet der Zufallszahlen sind eigentlich unabhaengig vom Startwert, von daher ist es egal, ob der immer nur steigt. Dadurch werden die Zahlen nicht vorhersehbarer (sollten zumindest nicht, aber das geht wohl mehr in die Theorie der Zufallszahlengeneratoren).

    sleep ist vermutlich kein Standard, das betriebssystemabhaengig. Auf Linux/ *BSD gib einfach mal 'man 3 sleep' ein.
     
  5. #4 root1992, 25.02.2007
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    for(short i = 0; i < 7; i++)

    hm ich glaube in C darf man nicht in einer Schleife eine Variable definieren.
    probiers mal:
    schort i;
    for (i=0;i<7;i++)
    vll bringts was.
     
  6. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Da meckert aber schon der Kompiler,d.h., es entsteht erst gar kein ausfuehrbares Programm.
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    versuch mal ein:
    Code:
    randomize();
    
    am Anfang vom Programm!

    Syntax weiß ich nicht mehr genau - kann sein daß du vielleicht noch irgendwas übergeben mußt.
     
  9. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Da meckert aber schon der Kompiler,d.h., es entsteht erst gar kein ausfuehrbares Programm.
     
Thema: C Funktion in einer Schleife ausführen (Funktion wird nur 1 mal ausgeführt)
Besucher kamen mit folgenden Suchen
  1. schleife in funktionen c

Die Seite wird geladen...

C Funktion in einer Schleife ausführen (Funktion wird nur 1 mal ausgeführt) - Ähnliche Themen

  1. SeaMonkey 2.26 mit kleineren neuen Funktionen

    SeaMonkey 2.26 mit kleineren neuen Funktionen: Das SeaMonkey-Projekt hat seine gleichnamige Internet-Applikationen-Suite in der Version 2.26 freigegeben, die nun auf dem Stand von Firefox 29...
  2. Variable aus einer Funktion abrufen

    Variable aus einer Funktion abrufen: Wie der Titel schon sagt, möchte ich eine Variable aus einer Funktion in einer anderen abrufen, zB. funktion1() { if [ blabla ] then...
  3. ftp download in einer funktion geht nicht

    ftp download in einer funktion geht nicht: Ich arbeite an einem Skript, dass mir u.a. ein File von einem FTP host runterlädt. Funktioniert an sich super, allerdings nicht wenn ich den...
  4. Funktionsaufruf innerhalb einer Funktion

    Funktionsaufruf innerhalb einer Funktion: Hi, ist es möglich eine Funktion aus einer anderen Funktion heraus aufzurufen ? Habe es so versucht: function funktion_1() { ... return $wert...
  5. Soundkarte / 2 Eingänge / Einer funktioniert aber nur Links

    Soundkarte / 2 Eingänge / Einer funktioniert aber nur Links: Hallo, ich hoffe mein Thread ist hier richtig. Mein Problem ist folgendes: Ich habe eine onboard-Soundkarte (NVidia MCP61) und hab an der...