rand() spuckt nur Null aus
-
Hi,
bin C++ Neuling, laut Lehrer sollte das folgende funktionieren, tuts aber nicht:
#include<iostream> #include<cstdlib> #include<ctime> .... int n = 10; float *b = new float[n]; srand((unsigned int) time(0)); for(int i=0;i<n;i++){ b[i] = float(rand()) / (RAND_MAX/100); }Angedacht ist das Feld mit Zufallszahlen zwischen 0 und 100 zu füllen, doch es füllt sich nur mit Nullen. Kann bitte jemand helfen?
-
sieht eigentlich aus, als würde das funktionieren.
kann es an der anzeige liegen, daß du den eindruck hast, es wäre nur nullen drin, obwohl richtige zufallszahlen drin sind?
-
Wenn ich das array ganz normal mit printf elementweise ausgeben lasse ist das mit jeder nachkommagenauigkeit null. Auch ein insertionsort gibt als laufzeit null aus, somit müssen alle elemente gleich sein. Irgendwas muss also genau in dieser Initialisierungsschleife daneben gegangen sein.
-
Zufall schrieb:
Wenn ich das array ganz normal mit printf elementweise ausgeben lasse ist das mit jeder nachkommagenauigkeit null. Auch ein insertionsort gibt als laufzeit null aus, somit müssen alle elemente gleich sein. Irgendwas muss also genau in dieser Initialisierungsschleife daneben gegangen sein.
aber
int main() { int n = 10; float *b = new float[n]; srand((unsigned int) time(0)); for(int i=0;i<n;i++){ b[i] = float(rand()) / (RAND_MAX/100); } for(int i=0;i<n;i++){ cout<<b[i]<<'\n'; } }gibt bei mir
70.7095
97.3517
39.7982
44.3089
86.7829
84.474
89.2569
13.9725
73.6055
87.5933
aus.dann hast du vielleicht die daten falsch an eine unterfunktion übergeben. oder dein würfeln ist in einer funktion und du gibst den neuen zeiger auf die daten nicht richtig raus.
-
@Zufall zeig uns Code, dann können wir mehr als nur raten wo der Fehler evtl. liegen könnte.
-
1. vielleicht geht es ja auch nicht, weil Zufall vergessen hat die time.h zu includen.
2. Wenn die Zahlen zu groß sind, einfach einen Maximalwert angeben:
a=rand()%50;//%50=kleiner 503.Wenn du b mit new deklarierst, musst du es auch wieder löschen!
float *b= new float[n]; //code dazwischen delete[] b;//löscht b4. ich habe den ganzen Code leicht abgeändert und bei mir funktioniert es auch:
#include<iostream> #include<conio.h> #include<time.h> #include<windows.h> using namespace std; int main() { int n = 10; float *b = new float[n]; srand(time(0)); for(int i=0;i<n;i++){ b[i] = float(rand()%101);//hält b kleiner 100 } for(int i=0;i<n;i++){ cout<<b[i]<<'\n'; } delete[] b; }
-
Zufall schrieb:
b[i] = float(rand()) / (RAND_MAX/100);Ich bin mir zwar nicht sicher, aber wird hier ein float durch ein int geteilt?
Gibt das dann float oder int als Rückgabe?
-
daersc schrieb:
Zufall schrieb:
b[i] = float(rand()) / (RAND_MAX/100);Ich bin mir zwar nicht sicher, aber wird hier ein float durch ein int geteilt?
Gibt das dann float oder int als Rückgabe?so bald mind. ein float dabei ist, werden sämtliche ints auf float gecastet und die division ergibt dem zu folge auch ein float...
hätte man aber auch einfach probieren können:int a (3); float b(2); std::cout << a/b << std::endl << b/a << std::endl;bb