srand(static_cast<unsigned>(time(0))) [war: unbekannte fehler meldung]
-
hallo
ich will eine zufallszahl zwischen 1 und 3 erzeugen
das klapp ja auch (siehe programm)
aber der compiler sag mir eine fehler meldung die ich nicht wegbekommeWarnung 1 warning C4244: 'Argument': Konvertierung von 'time_t' in 'unsigned int', möglicher Datenverlust e:\visual studio 2010\projects\hj\hj\jgg.cpp 12
ich habe mir bestimmt 4 stunden auf verschieden seiten und 2 büchern durch gelesen wie ich eine zufallszahl erzeugen und hab es endlich hinbekommen (um ehrlich zu sein kapiere ich es immer noch net aber egal)
wenn ihr mir ein tipp geben könnt wie ich effektiver eine zufallszahl erzeugen kann könnt ihr mir auch eine private message schreibendanke auch wieder für eure hilfe
ach ja das programm das läuft trotz warnhinweiß
#include <iostream> #include <cstdlib> #include <string> #include <time.h> using namespace std; int main() { //Zufallszahl erzeugen srand(time(NULL)); int zufall= rand () %3+1; cout<<"Zahl:"<<zufall<<endl; system("pause"); return (0); }
-
Hallo,
srand((unsigned int)time(0));
das sollte die Warnung beseitigen.
mfg Ergar
PS: Achte beim nächsten mal bitte mehr auf Punkt und Komma. Danke.
-
ah ok jetzt ist es weg, und ne zufällige zahl kommt auch, ich danke dir ergar.
ich werde das nächst mal auf punkt und komme achten.
-
Ergar schrieb:
srand((unsigned int)time(0));
Ohh, diese Gewalteinwirkung. Nimm lieber static_cast<unsigned int>(time(0))
-
time gibt einen time_t-Wert zurück, der je nach Compiler z.B. unsigned long long int sein kann.
srand erwartet aber ein unsigned int, das in dem Fall ein kleineres Limit hat, was zu Datenverlust führen kann.Zur Zeit liegt der Wert von time aber noch bei etwa 1,3 Milliarden. Ein unsigned int kann bis etwa 4,3 Milliarden zählen, also kannst du die Warnung für die nächsten Jahrzehnte entweder ignorieren oder mit einem Cast entfernen.
-
Wurstinator schrieb:
time gibt einen time_t-Wert zurück, der je nach Compiler z.B. unsigned long long int sein kann.
srand erwartet aber ein unsigned int, das in dem Fall ein kleineres Limit hat, was zu Datenverlust führen kann.Zur Zeit liegt der Wert von time aber noch bei etwa 1,3 Milliarden. Ein unsigned int kann bis etwa 4,3 Milliarden zählen, also kannst du die Warnung für die nächsten Jahrzehnte entweder ignorieren oder mit einem Cast entfernen.
Da wäre ich vorsichtiger, weil die größe vom Interger durch den Standard nicht festgelegt ist, sondern vom System zu System unterschiedlich sein kann (auch mal 2 Byte anstatt 4). Obwohl... das sind dann eher die alten guten Kisten, die keiner mehr benutzt.
-
[Rewind] schrieb:
Wurstinator schrieb:
time gibt einen time_t-Wert zurück, der je nach Compiler z.B. unsigned long long int sein kann.
srand erwartet aber ein unsigned int, das in dem Fall ein kleineres Limit hat, was zu Datenverlust führen kann.Zur Zeit liegt der Wert von time aber noch bei etwa 1,3 Milliarden. Ein unsigned int kann bis etwa 4,3 Milliarden zählen, also kannst du die Warnung für die nächsten Jahrzehnte entweder ignorieren oder mit einem Cast entfernen.
Da wäre ich vorsichtiger, weil die größe vom Interger durch den Standard nicht festgelegt ist, sondern vom System zu System unterschiedlich sein kann (auch mal 2 Byte anstatt 4). Obwohl... das sind dann eher die alten guten Kisten, die keiner mehr benutzt.
Ja, aber die Funktion will nun mal unsigned int, daran können wir nichts ändern. :p
edit: vielleicht wird es ja irgendwann zu unsigned long long (min. 8 Bytes) geändert.