kleines RANDOM - Problem mit C

lukasS

Erfahrenes Mitglied
Hallo,

ich habe ein kleines Problem mit C. Ich bräuchte eine Zufallszahl zwischen 0 und 10. Ich habe es mit iVariable = rand()%10; versucht und ich kriege zwar eine Zufallszahl, aber wenn ich das Programm neustarte, dann erhalte ich wieder die gleiche Zahl wie vorher.

Ich bin für jede Hilfe dankbar!

Lukas
 
Danke für den Tipp,

ich weiß aber nicht, ob ich das auch so hinkriege, beschäftige mich erst seit kurzem mit C. Mache eigentlich nur was mit VBA.

Werde es einfach mal versuchen, vielleicht klapps.

Lukas
 
Tja, und schon habe ich es :)

Weiß zwar nicht, ob das die eleganteste Lösung ist, aber es funktioniert. Das mit dem TIMER hat mich auf die Idee gebracht.


#include <stdio.h>
#include <time.h>

#define iRand 10

void main( void )
{
int i = 0;
int sec = 0;

time_t TIME;
struct tm *TM;
TIME = time(NULL);
TM = gmtime(&TIME);
sec = (*TM).tm_sec;

clrscr();
srand(sec);

for(i = 0; i <= iRand; i++)
printf( "%6d\n", rand()%iRand);

getch();

}


Danke nochmal!!!

Lukas
 
Code:
   srand( (unsigned)time( NULL ) );
   int zufall=rand()%10;

So sollte das auch gehen! Ohne die vielen Variablen ist der Code übersichtlicher :)
 
Soweit klappt alles. Nur ich will noch alle Werte zwischen 0 und 10 gemischt in einem Array haben. Ich habe mir dafür ein Algorithmus geschrieben, damit ich keine Zahl doppelt habe. Problem ist, dass das Programm manchmal nur 1 Zahl oder manchmal auch alle Zahlen erstellt. Denke, dass das an dem srand() liegt, oder liege ich da total deneben.
 
also wenn ich dich richtig verstanden habe sollte das hier dein prob lösen :

Code:
int main(void)
{
	char output[10];
	int i, tmp;

	srand(time(NULL));
	//initialisiere es auf irgendwas ausser 0-9
	memset(output, 0xaa, 10);
	for (i = 0; i < 10; i++)
	{
		do tmp= rand() % 10;
		while (strchr(output, tmp));
		output[i] = tmp;
		//+ '0' das der user auch wat sieht :D
		printf("%c", output[i] + '0');
	}

	return 0;

}

<edit modname="Lirion">Gewöhnt Euch bitte an, die Code-Tags zu benutzen. Danke. :)</edit>
 
Zuletzt bearbeitet von einem Moderator:
Danke,

aber in der do - while kommt er in eine Endlosschleife. Hast du eine Idee, wie ich das verhindern könnte?

Danke nochmal für Hilfe!!

Lukas
 
Servus!

Nur mal so ne Frage ... liefer die Rand() Funktion nicht einen Wert zwischen 0 ... 1 ? Dann muss er Aufruf für Zufallszahlen von 1... 10 doch so aussehen

...
int zufzahl = (int)(Rnd() * 10);
...

oder täusche ich mich da ?

Gruss Tom
 
Ich hatte den Code vorher kompiliert und wenn du alles so reinpastest wie es da steht, sollte es laufen. (Natürlich die #includes beachten).
Btw, der Code basiert auf dem brute-force Verfahren , solch ein Code bitte nicht anwenden wenn du 20000 zahlen oder so hast (würde zulange dauern).
 
Zurück