rand() Anweisung immer = 41
-
wobei das nicht dein fehler ist, du hasst da, wo du die richtige random zahl ausgeben willst randomzahl hingeschrieben, erstens ohne "()" und zweitens wird dir das eine neue random zahl generieren.
musst die also irgendwo in der main zwischenspeichern.
der compilerfehler rührt aufjeden fall von den nicht vorhandenen "()" her.
-
da sind ausserdem noch weitere fehler. du brauchst den random generator nur einmal aufrufen, nicht jedesmal wieder und return weißt man nichts zu.
also nicht: "return = rand();" sondern "return rand();"
-
int rand(unsigned short low = 1, unsigned short up = 100) { return std::rand() % up + low; }... und return ist keine "Variable" der du einen Wert zuweißt ... nicht wie in Delphi(das ist eine scheiß Sprache ... bringt viel Mist mitsich) ... einfach den Rückgabewert angeben ...
std::srand soll man nur 1mal im Programm aufrufen ... d.h. ruf es einfach im main auf ...@using namespace std-Fans: na jetzt würdet ihr ein Problem haben

-
Delphi hab ich als letztes gleernt, allerdings schul bedingt. Daher auch mein "="

Also ich hab das Ding jetzt zum laufen gebracht. Hab den Wert in der Main in eine Variable abspeichern lassen, da mir beim Coden schon auffiel das ich dann 3 verschiedene Zahlen bekommen würde und das wollte ich ja nicht.
Warum sollte man std::srand nur einmal im Programm aufrufen?
Und was meinst du mit:
"@using namespace std-Fans: na jetzt würdet ihr ein Problem haben" ???
-
Hmm ... also ... ich erkläre mal meinen Code dann kommst du vllt selbst drauf ...
#include <iostream> // std::cout, std::cin #include <ctime> // std::time /* nicht time.h nutzen! */ #include <cstdlib> // std::srand, std::rand /* nicht stdlib.h nutzen! */ #include <limits> // std::numeric_limits int main() { std::cout << "Zahlenraten V1.0" << std::endl; std::cout << "Bitte geben Sie eine beliebige Zahl zwischen 1 und 100 ein! " << std::flush; unsigned short num = 0; while (!(std::cin >> num) || num < 1 || num > 100) // konnte die Eingabe in einen unsigned short gepackt werden? Ist die Zahl im Zahlenbereich 1 - 100? { // nein! std::cin.clear(); // alle status und failbits zurücksetzen! std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } std::srand(std::time(0)); // std::rand initialisieren. Als Wert die aktuelle Zeit ... => scheinbare Zufälle! std::cout << ((std::rand() % 100 + 1) == num ? "Richtig!" : "Falsch!") << " Die Zahl hiess \"" << num << "\"." << std::endl; // if (std::rand() % 100 + 1 == num) std::cout << "Richtig!"; else std::cout << "Falsch!"; std::cout << Die Zahl hiess \"" << num << "\"." << std::endl; wäre die ausführliche Schreibweise. /* ersetzt getch() */ ... std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.get(); }so und nun zu dem von wegen usign namespace ...
int rand(unsigned short low = 1, unsigned short up = 100) { return std::rand() % up + low; } usign namespace std; int main() { srand(time(0)); cout << rand() << endl; // welches rand soll er denn jetzt nehmen? das im global scope oder das aus std? }
-
(D)Evil dein Code ist unfair. Wie soll man eine Zahl erraten die es noch gar nicht gibt

-
(D)Evil schrieb:
so und nun zu dem von wegen usign namespace ...
int rand(unsigned short low = 1, unsigned short up = 100) { return std::rand() % up + low; } usign namespace std; int main() { srand(time(0)); cout << rand() << endl; // welches rand soll er denn jetzt nehmen? das im global scope oder das aus std? }Richtig. Da gibt es jetzt gar keine Lösung
Die Welt ist nämlich entweder schwarz oder weiß, niemals grau. Wer using-Direktiven verwendet darf niemals qualifizieren und wer der qualifiziert darf niemals usen. So spricht das Gesetzt und wenn das spricht, hat das Hirn Pause 
Ne, mal ehrlich, dir ist schon klar, dass du using-Direktiven, using-Deklarationen und explizite Qualifikation frei mischen kannst.
int rand(unsigned short low = 1, unsigned short up = 100) { return std::rand() % up + low; } using namespace std; int main() { srand(time(0)); cout << ::rand() << endl; }Fertig und hat auch gar nicht weh getan.
-
int rand(unsigned short low = 1, unsigned short up = 100) { return std::rand() % up + low; }Darf ich mal fragen, ob dieser Code dazu gedacht ist, mir eine Zufallszahl zwischen low und up auszugeben? Weil er das nämlich nicht tut. Wenn ich das Ding aufrufe mit z.B.
int rnd = rand(80,100);dann kommt raus (nur ein Beispiel): 368 % 100 + 80 = 68 + 80 = 148.
Ich schei**e hier nur gerade klug, weil ich sowas selber gerade brauche und gerade nicht drauf kommen, wie man das denn wirklich machen sollte.Gruss. mbu.
-
int rand(unsigned lower, unsigned upper) { int range = upper - lower; return ( static_cast<float>( rand() ) / RAND_MAX ) * range + lower; }so zum bleistift
-
Super. Vielen Dank.