problem mit datum



  • hi, ich hoffe ich bin hier richtig 😉

    wollte soeben das aktuelle datum ausgeben und hier mein code:

    #include <iostream>
    #include <ctime>
    
    using namespace std;
    
    int main ()
    {
       cout << "Aktuelles Datum: ";
       system("date");
       cout << endl;
    
       return 0;
    }
    

    ich verstehe nicht warum die ausgeben vertauscht werden.
    waere super wenn mir jemand helfen koennte - danke schon mal!


  • Administrator

    int main ()
    {
       cout << "Aktuelles Datum: ";
       cout.flush(); // <- Könnte helfen.
       system("date");
       cout << endl;
    
       return 0;
    }
    

    Auf system sollte man übrigens, wenn möglich, verzichten:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39453.html

    Es gibt Zeitfunktionen in C, welche man über den Header <ctime> in C++ bekommt.
    http://www.cplusplus.com/reference/clibrary/ctime/

    Zudem gibt es eine sehr nette DateTime Bibliothek von Boost:
    http://www.boost.org/doc/libs/1_37_0/doc/html/date_time.html

    Grüssli



  • hallo, danke fuer deine rasche antwort.
    kenn mich noch nicht so aus mit streams, aber ich verstehe hier nicht warum ich dieses flush brauche.
    soweit ich weiß werden durch flush alle noch nicht ausgegebenen chars ausgegeben - oder?

    aber wenn ich meinen code ansehe sollte ja zuerst etwas ausgegeben werden und dann etwas neues.

    warum benoetige ich das flush?

    vielen dank...


  • Administrator

    AbsoluterBeginner schrieb:

    aber wenn ich meinen code ansehe sollte ja zuerst etwas ausgegeben werden und dann etwas neues.

    system ist keine Ausgabe! Bei system wird eine Shell gestartet, auf welche das Programm wartet. In dieser neuen Shell kann es sein, dass eine Ausgabe erfolgt, muss es aber nicht.
    Nun kann dein Text, welcher du über std::cout vorher ausgegeben hast, noch in einem Puffer zwischenlagern, während system ausgeführt wird. system macht eine Ausgabe und überpsringt somit die vorherige, welche immer noch im Puffer liegt. Der Ausgabepuffer von system und deinem std::cout ist nicht zwingend der gleiche!
    Das std::cout.flush() garantiert nun, dass dein Ausgabepuffer vor dem Ausgabepuffer vom system Aufruf geleert wird.

    Deshalb und aus anderen Gründen, sollte man allgemein auf system verzichten. Siehe den geposteten Link für die weiteren Gründe.

    Grüssli



  • danke, ich habe mir immer gedacht das der buffer nach dem ; geleert wird.
    also der cout buffer flusht sich nach jedem vollstaendigen cout statement, ist aber anscheinen nicht so 😃

    danke fuer deine hilfe!


  • Administrator

    AbsoluterBeginner schrieb:

    danke, ich habe mir immer gedacht das der buffer nach dem ; geleert wird.
    also der cout buffer flusht sich nach jedem vollstaendigen cout statement, ist aber anscheinen nicht so 😃

    Nein, wird er nicht. std::endl tut es oder halt der manuelle Aufruf von flush . Da man oft noch eine std::endl am Ende einer Ausgabe hinschreibt, so ist es halt üblich, dass der Stream am Ende geflusht wird 😉

    AbsoluterBeginner schrieb:

    danke fuer deine hilfe!

    Kein Problem, freu mich, dass ich helfen konnte.

    Grüssli



  • aaah mit endl wird er geflusht...
    jetzt habe ich es komplett verstanden, zum letzten mal danke! 😉


Anmelden zum Antworten