Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
hi
wir lernen in der schule grade c++. unser lehrer konnte uns aber nicht erklären, wo der unterschied zwischen endl und \n ist. er weiß aber, dass es einen gibt.
(nicht der, dass das eine c und das andere c++ ist^^)
Das endl manipuliert den Ausgabestrom.
Und zwar in der Weise, dass es ein in den Ausgabestrom ein "newline" Zeichen anhängt.
Zusätzlich wird, falls der Strom gepuffert ist, was bei Textausgabe auf den Bildschirm der Fall ist, der Strom "leergespült" (flush). Dies bewirkt eine sofortige Anzeige des Textes auf dem Bildschirm.
Wenn man nur \n benutzt, dann wird nur ein newline-Zeichen eingefügt.
Die Ausgabe wird aber nicht zwangsläufig sofort dargestellt, weil eben das "spülen" des Ausgabestroms fehlt.
Auf dieser Seite findet man die Antwort: http://userpage.fu-berlin.de/~ram/pub/pub_jf47hxhHHt/c++_zeilenformatierung_de
Aber ein Freund meinte, dass beim kompilieren \n durch das dem Betriebssystem entsprechende Zeichen ersetzt wird. Also für Windows CR/LF, für Unix LF und für Mac CR, und endl erst zur Laufzeit.
Aber ein Freund meinte, dass beim kompilieren \n durch das dem Betriebssystem entsprechende Zeichen ersetzt wird. Also für Windows CR/LF, für Unix LF und für Mac CR, und endl erst zur Laufzeit.
Passiert beides erst zur Laufzeit. Was soll der Compiler denn hier machen? CR/LF sind zwei Zeichen:
Code:
char c = '\n'
\n ist und bleibt \n.
Das '\n'-Handling in C++ passiert durch die Stream-Bibliothek (grob gesagt, cin/cout und Konsorten). Wird ein '\n' in einen Stream geschrieben, wird widen aufgerufen, was daraus das plattformspezifische "Newline" macht. Wie schon gesagt wurde, für Windows z.B. CRLF. Für's Lesen wird analog automatisch narrow aufgerufen, was das ganze dann wieder in ein '\n' konvertiert. Passiert alles im Hintergrund, ohne dass man sich Sorgen darüber machen müsste.
Ansonsten wurde es ja schon gesagt: endl schreibt ein '\n' und leert den Ausgabestream, sofern gepuffert.
Für den Fall, dass cout.sync_with_stdio() == true ist, sollte cout seinen Streambuffer gleich nach stdout schreiben. Wenn das mal jemand ausstellt, hast Du ein Problem Wenn Du eh schon die Standard iostreams benutzt, warum dann nicht cout << flush / cout.flush()? Außerdem wird das Mixen von C-IO mit C++-IO als unschön angesehen