Konsolenanwendung???
-
danke für eure antworten es geht jetzt.
jetzt hab ich noch ein problem mit dem zufallsgenerator: was kann ich tun ausserjedesmal ne andere zahl einzugeben, dass immer andere zufallszahlen kommen? wenn ich zb 2mal hintereinander 10 eingebe, kommen immer die gleichen zufallszahlen. kann man das irgendwie umgehen?
-
Der Zufallsgenerator, den rand() verwendet, ist deterministisch - aus dem gleichen Startwert folgt auch die gleiche Zufallsfolge. Darum verwendet man normalerweise einen mehr oder weniger willkürlich gewählten Wert als Startpunkt (für den Anfang ist der Rückgabewert von time() recht brauchbar).
-
#include <ctime> #include <cstdlib> ... std::srand(std::time(0)); ... std::rand(); ...
-
wie funktioniert das mit time denn? kenn mich damit nich aus
edit: ups hab wohl nicht aktualisiert
thxEdit 2:
Kann mir jemand sagen was hier das Problem ist?:#include "stdafx.h" #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int fehler=0; int zufall=0; int raten=0; bool erraten=false; cout <<"Erraten Sie die zufällige Zahl zwischen 1 und 15. Sie haben 3 Versuche" <<endl; srand(time(0)); zufall= rand()% 15 + 1; while (!erraten || fehler<=3) { cin >> raten; if raten < zufall { cout << "Die Zahl ist größer"; ++fehler; } else { if raten > zufall { cout << "Die Zahl ist kleiner"; ++fehler; } else { cout << "Die zahl ist richtig. DIe Zahl lautet: " << zufall; erraten=true; } } } cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get(); return 0; }es kommen immer diese völlig unsinnigen fehler:
Warnung 1 warning C4244: 'Argument': Konvertierung von 'time_t' in 'unsigned int', möglicher Datenverlust Fehler 2 error C2061: Syntaxfehler: Bezeichner 'raten' Fehler 3 error C2143: Syntaxfehler: Es fehlt ';' vor '{' Fehler 4 error C2181: Ungültiges 'else' ohne zugehöriges 'if' Fehler 5 error C2061: Syntaxfehler: Bezeichner 'raten' Fehler 6 error C2143: Syntaxfehler: Es fehlt ';' vor '{' Fehler 7 error C2181: Ungültiges 'else' ohne zugehöriges 'if'seit wann gehört ein ; vor eine {?? und die 2 else haben ja auch ifs
-
Es gehören keine ; vor {, aber es gehören () um die Bedingungen

Nach if muss immer ein geklammerter Ausdruck folgen - also etwa if (!erraten || ...) {
-
argh so ein mist jetzt gehts. allerdings mit dem time() zufallsgenerator kommt bei mir jedes mal die Zahl 6.woran könnte das liegen?
-
Thundereye schrieb:
argh so ein mist jetzt gehts. allerdings mit dem time() zufallsgenerator kommt bei mir jedes mal die Zahl 6.woran könnte das liegen?
Du initialisierst srand immer mit derselben Zahl. Ich zitiere:
CStoll schrieb:
Der Zufallsgenerator, den rand() verwendet, ist deterministisch - aus dem gleichen Startwert folgt auch die gleiche Zufallsfolge. Darum verwendet man normalerweise einen mehr oder weniger willkürlich gewählten Wert als Startpunkt (für den Anfang ist der Rückgabewert von time() recht brauchbar).
Versuchs mal so:
#include <time.h> time_t t; srand( ( unsigned )time( &t ) );
-
#include <ctime> //TIME.H ist C std::time_t t; //time_t liegt im Namesraum std:: std::srand( static_cast<unsigned>(std::time( &t )) );//(unsigned) ist ein C-Cast in C++ heißt das static_cast<unsigned>Das übergeben des time_t ändert IMHO überhaupt noichts an dem Wirken der Funktion
The function time() returns the current time, or -1 if there is an error. If the argument 'time' is given, then the current time is stored in 'time'.
#include <iostream> #include <ctime> int main() { std::cout <<"Erraten Sie die zufällige Zahl zwischen 1 und 15. Sie haben 3 Versuche" << std::endl; std::srand( static_cast<unsigned>( std::time(0) ) ); int zufall( std::rand()% 15 + 1 ); bool erraten( false); unsigned fehler( 0 ); while (!erraten || fehler<=3) { int raten; std::cin >> raten; if (raten < zufall) { std::cout << "Die Zahl ist größer"; ++fehler; } else { if (raten > zufall) { std::cout << "Die Zahl ist kleiner"; ++fehler; } else { std::cout << "Die zahl ist richtig. DIe Zahl lautet: " << zufall; erraten=true; } } } std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); }Gibt bei mir verschiedene Zufallszahlen ...
-
#include <ctime> //TIME.H ist C std::time_t t; //time_t liegt im Namesraum std:: std::srand( static_cast<unsigned>(std::time( &t )) );//(unsigned) ist ein C-Cast in C++ heißt das static_cast<unsigned>Ok, wenn ich das aber jetzt bei mir so benutze, dann bekomm ich mehrere Fehler. Unter anderem:
error C2039: 'time_t' : is not a member of 'std'
...
error C2653: 'std' : is not a class or namespace name
...
-
include auf <ctime> geändert?
Welcher Compiler?
-
darthdespotism schrieb:
include auf <ctime> geändert?
Welcher Compiler?
Ja.
Visual C++ 6.0.
-
aus dem was der VC6 dir sagt kannst du wenig bis nichts über gültiges C++ schließen.
Warum verwenden so viele Menschen noch ohne Zwang diesen Uralt-Compiler?

-
darthdespotism schrieb:
Warum verwenden so viele Menschen noch ohne Zwang diesen Uralt-Compiler?

Also ich verwende ihn unter Zwang.

-
mal ne frage: wieso verwendet ihr alle std::<Befehl> und nicht using namespace std?
-
mbu schrieb:
darthdespotism schrieb:
Warum verwenden so viele Menschen noch ohne Zwang diesen Uralt-Compiler?

Also ich verwende ihn unter Zwang.

Jap hatte ich auch eine Zeit lang, das Projekt war einfach nicht zu konvertieren ...
Eigentlich dachte ich das ginge selbst da mit den <c...> headern ordentlich, vll habe ich mich getäuscht, ISO-C++ ist das jedenfalls
Thundereye schrieb:
mal ne frage: wieso verwendet ihr alle std::<Befehl> und nicht using namespace std?
Namespaces sind dazu da Namenskonflikte auszuschließen.
Was meinst du warum die ganzen std-lib Namen in std:: gepackt wurden?und ein std:: davor ist jetzt wirklich nicht das Problem, notfalls ein
using std::cout;wenns wirklich stört, aber einen ganzen Namespace einzubinden ist keine gute Idee
-
achso na dann isses klar

-
Thundereye schrieb:
mal ne frage: wieso verwendet ihr alle std::<Befehl> und nicht using namespace std?
Weil alle cool sind

Ne im ernst, wenn du dir ein einfaches Programm schreibst, dann reicht ein using oben. Es erspart arbeit überall ein std:: zu schreiben.
-
Mag sein dass es in einem kleinen Projekt keine Probleme mit gibt, aber man gewöhnt sich schlechten Stil an, den man später irgendwann bereuen wird und so viel arbeit ist das nu wieder auch nicht
-
Hallo,
technisch gesehen ist eine using-Direktive *nach* allen includes in einer *cpp*-Datei kein schlechter Stil. Es ist vielleicht gegen den Geschmak mancher Tippfanatiker, aber das war's dann auch schon.
-
HumeSikkins schrieb:
Hallo,
technisch gesehen ist eine using-Direktive *nach* allen includes in einer *cpp*-Datei kein schlechter Stil. Es ist vielleicht gegen den Geschmak mancher Tippfanatiker, aber das war's dann auch schon.Eben. Das ist genauso idotisch wie die Guideline, 'Imports'/'using'-Direktiven in VB/C# zu verbieten (es gibt einige Firmen, die das so handhaben).