[C]Frage zur Funktion rand

Cemil

Erfahrenes Mitglied
Hallo zusammen,
ich lerne gerade C und hätte eine Frage zu der Funktion rand:

Das Programm sollte eine Zufallszahl zwischen 1 und 10 erzeugen, schön und gut, aber es erzeugt immer die gleiche Zahl (die Zahl 1). Das ist ja nicht der Sinn und Zweck der Sache.

Die Bedingung für das Spiel lautet:

1. Man hat max. 3 Versuche (count != 3), in denen man die Zahl erraten muss.

2. Solange die Variable von erraten auf dem Wert 0 UND den Zähler für die Versuche count noch nicht auf 3 stehen, beginnt der Anweisungsblock wieder von neuem.

3. Ist eine dieser Bedingungen unwahr, hat man entweder die Zahl erraten oder mehr als drei Versuche benötigt. Dies wird anschliessend nach dem Anweisungsblock ausgewertet.

Ich bin hier sicher nicht der einzige C-Neuling, deshalb habe ich das ganze Schritt für Schritt aufgeschrieben, damit man es besser nachvollziehen kann.

Hier das Listing (erstellt in MS Windows + Dev-C++ 4.9.8.7):
Code:
#include <stdio.h>
#include <stdlib.h>  /* für rand() */

int main()
{
 int ratezahl, count=0, erraten=0;
 int zufall=rand()%10; /* Pseudo-Zufallszahl von 1-10*/

 do{  /* Start der do while Schleife */
      printf("Zahleingabe bitte (1-10): ");
      scanf("%d", &ratezahl);
      if(ratezahl==zufall) /*Zahl richtig geraten? */
        {
         erraten=1; /* Ja die Zahl ist richtig */
         count++;
        }
      else
        {
         (ratezahl>zufall) ? printf("kleiner\n") : printf("grösser\n");
         count++;
        }
  }while( (erraten != 1) && (count != 3) );

  if(erraten == 0)
    {
      printf("Sie haben 3 Chancen vertan ;) \n");
      printf("Die Zahl wäre %d gewesen: \n", zufall);
    }
  else
    printf("Mit %d Versuchen erraten!\n",count);
  system("pause");
  return 0;
}

Was ist an diesem Listing falsch?

Für eure Hilfe bedanke ich mich im voraus.

Schönen Abend noch...
 
Zuletzt bearbeitet:
Hi,
nach langem rumwursteln habe ich die Lösung gefunden:

Code:
#include <stdio.h>
#include <stdlib.h>  /* für rand() */
#include <time.h>    /* für time() */

int main()
{
   srand( time(NULL) );      /* Initialisiert Zufallszahl Generator */
   int ratezahl, count=0, erraten=0; 
   int zufall=rand()%10+1;   /* Pseudo-Zufallszahl von 1-10*/

   do{  /* Start der do while Schleife */
      printf("Zahleingabe bitte (1-10): ");
      scanf("%d", &ratezahl);
      if(ratezahl==zufall) /*Zahl richtig geraten? */
        {
         erraten=1; /* Ja die Zahl ist richtig */
         count++;
        }
      else
        {
         (ratezahl>zufall) ? printf("kleiner\n") : printf("grösser\n");
         count++;
        }
   }while( (erraten != 1) && (count != 3) );

   if(erraten == 0)
    {
      printf("Sie haben 3 Chancen vertan ;) \n");
      printf("Die Zahl wäre %d gewesen: \n", zufall);
    }
   else
      printf("Mit %d Versuchen erraten!\n",count);
   system("pause");
   return 0;
}

Der Zufallszahl Generator für rand war nicht gesetzt und deshalb lief das ganze nicht.

Grüsse...
 
Zuletzt bearbeitet:
Hi,

hab da auch noch eine Frage.

also ich habe das jetzt mit allen Varianten probiert, die es im Internet zu finden gibt, aber es funktioniert einfach nicht. Immer habe ich nur Pseudo zufallszahlen.

Woran kann das liegen.

Hier einmal mein Zufallszahlen testprogramm:
#include <iostream>
#include <stdlib.h>
#include <time.h>
int main()
{
srand( time (NULL) );
int zufall;

zufall = rand()%10+1;

cout << zufall << endl;

system("PAUSE");
return 0;
}

eigentlich soll das so gehen, es tut es aber leider nicht.

Ideen ?
 
Zuletzt bearbeitet:
Versuch es mal mit einem double oder float für zufall. Zahlen zwischen 0 und 1 sind meißtens keine ints
 
hmm,

nein. Auch nicht.

Langsam wird das hier zum Ratespiel.

Vielleicht sollten wir lieber in die Richtung gehen was ansonsten nicht richtig sein kann.
 
Rand liefert eine Zahl zwischen 0 und RAND_MAX, ergo musst du den Wert den du erhälst entsprechend skalieren. Alternativ kannst du wie erwähnt den Modulo verwenden (Dann hast du aber deine Verteilung ganz leicht verschlechtert)

Zahlen zwischen 0 und 1 sind meißtens keine ints
LOL, das ist das geilste was ich je gelesen habe *g*, ich lach mich tot

@swiedre
Was hat den nicht funktioniert an deinem letzten Beispiel Ich musste noch using namespace std; eingeben damit es linkt und compiliert, aber ansonsten hat das ding schön brav Zufallszahlen generiert.
 
Aber immer die selben, also immer einem bestimmten Muster folgend.

Auch wenn ich das aus einem meinem compiler beiligenden Beispiel stumpf rauskopierte funktionierte das nicht. Das ist sooo mysteriös.
 

Neue Beiträge

Zurück