\n oder endl; ???



  • hi leute. bin noch in einem sehr frühen stadium der c++ programmierung und würde gerne mal wissen, worin der unterschied zwischen diesen diesen beiden anweisungen besteht?

    beide dienen dazu eine zeile tiefer zu springen. optisch, spielt es siche keine rolle, welchen man verwendet, aber technisch gibt es doch sicher unterschiede.

    wann sollte man was verwenden???

    danke



  • cout << endl;
    

    macht dasselbe wie

    cout << "\n" << flush;
    

    Flush bedeutet, dass der Puffer der Konsole geleert wird, was die Ausgabe verlangsamt, alle Nachrichten aber sofort in Echtzeit erscheinen. Ich glaube aber, dass die Nachrichten in der Konsole (zumindest bei mir) auch ohne Flush in Echtzeit erscheinen, nur wenn du den Output in einem anderen Programm in Echtzeit mitlesen willst, solltest du flushen.



  • `\n[c]

    Mit \n gibst du nur eine Leerzeile aus.

    [c]endl`
    Mit endl gibst du eine Leerzeile aus und zwingst den Stream dazu den Puffer zu flushen, also alles genau jetzt auf dem Bildschirm auszugeben.[/c]



  • achso,
    also bedeutet das, wenn ich

    endl;
    

    nicht schreibe, sondern nur mit \n arbeite und am ende des textes nur ein semikolon setzte, wird der text zeile für zeile ausgegeben und wenn ich endl; am ende schreibe wird der text erst ausgegeben wenn endl; gefunden wird, und dann eben alles auf einmal.

    hab ich das so richtig verstanden???

    wenn ja, macht es manchmal sinn, das ein oder andere zu verwenden, oder spielt das keine rolle?



  • Die Ausgabe wird gepuffert, es wird also eine gewisse Anzahl an Zeilen gespeichert und erst dann ausgegeben, wenn der Puffer voll ist bzw. wenn man mit endl schon früher sagt, dass der Puffer geleert wird.

    Der Sinn ist es, dass nicht bei jeder Kleinigkeit geschrieben wird, sondern das erst "gesammelt" wird, um alles in einem Rutsch zu schreiben.

    Wenn du also viele Daten (z.B. in einer Schleife) schreibst und es reicht, wenn die Daten am Ende der Schleife zur Verfügung stehen, dann kannst du auf endl verzichten. Ist es jedoch notwendig, dass die Daten sofort geschrieben werden, dann musst du das mit endl anweisen.

    Bei Fehlermeldungen ist endl z.B. sinnvoll, da diese sofort ausgegeben werden sollen. Es könnte ansonsten sein, dass das Programm abstürzt und der Puffer eben nicht mehr automatisch geleert wird.



  • Ob du \n oder ein anderes Zeichen ausgibst, ist der Konsole völlig egal, außer natürlich, dass sie \n anders anzeigen muss. Dieser Text wird jedoch in einen Zwischenspeicher, der extra für den Output angelegt ist, geschrieben. Dieser wird geleert und ausgegeben, sobald er voll ist. Gibst du jetzt endl aus, so wird ein \n in den Zwischenspeicher geschrieben und dieser dann sofort geleert und ausgegeben, was deine Ausgabe verlangsamt. Es ist also nur manchmal sinnvoll, endl zu verwenden. (evtl. ist es auch besserer Stil, dann gleich cout << "\n" << flush; zu schreiben, weil es dann auch sofort auffällt)

    Das ist in etwa so, als ob du einmal ("\n"-Methode) fünf Fragen stellst und ich dann in einem Beitrag auf alle fünf antworten kann, oder ob du (endl-Methode) eine Frage stellst, auf die ich antworte, dann die zweite, Antwort, dann die dritte, Antwort, usw. Ich muss also bei der endl-Methode fünf Mal in meine Mails schauen, die Forumseite öffnen und auf Antworten klicken, um dann den Beitrag zu schreiben, während ich das bei \n nur einmal muss.


Anmelden zum Antworten