keine Zufallszahl bei rand()%x;



  • Hallo Leute,

    Ein simples Programm, aber ich kriegs nicht hin.
    Es soll eine Zahl (hier die Variable "p") eingegeben werden, die das Intervall für die Random-Funktion festlegen soll.
    Danach soll der Benutzer raten, welche Zahl die Maschine gewählt hat.

    Wenn ich jetzt z.B. die Zahl 50 für das Intervall wähle(oder irgendeine größer 41), ist die zu ratende Zahl immer 41.
    Wenn ich eine Zahl unter 40 für das Intervall wähle, ist die zu ratende Zahl immer 1.
    Und bei einer Intervall grenze von 41, ist die zu ratende Zahl 0.

    Kann mir Jemand hier behilflich sein, auch eine Erklärung wäre hilfreich warum mein Programm nicht funzt.

    Ach ja und am Besten ohne eine weiter Header-Datei zu laden.

    Bedanke mich schon einmal bei allen für die Hilfe.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      int p;
      int zahl; 
      int z=1; 
      int erraten=0;
      int zufall;
    
      printf("\nBestimme das Intervall: ");
      scanf ("%d",&p);
      zufall = rand()%p;
    
      do {
          printf("\nDein %d. Versuch: ",z);
          scanf ("%d",&zahl);
          z--;
          if (zahl == zufall) {
                             erraten=1;
                             z++;
                             printf ("\nRichtig geraten, beim %d. Versuch! Die Zahl ist %d.\n\n",z,zufall);
                             }
                             else if (zahl > zufall) 
                                 {
                                 z++;
                                 printf("Das war dein %d. Versuch. Eingegebene Zahl: %d.\t\t....zu hoch\n",z,zahl);
                                 }
                                 else {
                                  z++;
                                  printf("Das war dein %d. Versuch. Eingegebene Zahl: %d.\t\t....zu niedrig\n",z,zahl);
                                      }
          } while (erraten!=1);                                               
      system("PAUSE");	
      return 0;
    }
    


  • Du solltest einmal man: srand(3) aufrufen.

    (typischerweise wird einfach srand((unsigned)time(NULL)); genommen)



  • rand() bietet keinen echten Zufall.
    Die Werte werden berechnet. Und dso bekommst du immer die selben Werte.
    Dass dies blöd ist, ist bekannt, darum kann man den Startwert für den Zufallsgenerator setzen. Dies geht mit srand() .

    Wenn du jetzt aber srand(12345); schreibst, bekommst du trotzdem immer wieder die selben Zahlen, weil der Startwert konstant ist.

    Darum schreibt man einmal beim Programmstart

    srand(time(NULL); // time aus <time.h>
    

    time() gibt die Unixtime zurück. Die Sekunden seit dem 01.01.1970 00:00.
    So bekommst du nur gleiche Werte, wenn du dein Programm innerhalb der selben Sekunde neu startest.



  • Super danke euch Beiden, besonders für die hilfreiche Erklärung.

    Also die Header-Datei "#include <time.h>" hinzugefügt und "srand ((unsigned)time(NULL));" vor die rand() Funktion geschrieben. jetzt gehts 🙂

    Nachdem ich wusste, dass srand benötigt wird, war es auch schnell zu googlen, aber als absoluter Anfänger, wusste ich nicht wonach ich suchen hätte müssen.

    Nochmals Danke.



  • Im Allgemeinen werden rand() und srand() zusammen erklärt.
    Also einfach nach "rand Zufall C" suchen.


Anmelden zum Antworten