Konsolenanwendung???



  • 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).


Anmelden zum Antworten