JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=165c3a2f6b4f65fc866eef8d5036d028Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

unterschied zwischen endl und \n ?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 14:47    Titel: unterschied zwischen endl und \n ? Antworten mit Zitat

Hi,
hab gerade mit jemandem im chat über proggen geplaudert.

Da kam auch endl ins Gespräch, das z.B. so eingesetzt wird:
Code:

cout << "Hallo Welt!" << endl;

hat aber für den Anweder den selben Effekt wie
Code:

cout << "Hallo Welt!\n";


Mein Gesprächspartner meinte irgendwas mit flush und das mit endl auch das ausgegebene aus dem Speicher gelöscht wird und \n nur für newline steht.

Kann mich jemand aufklären?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 14:57    Titel: Antworten mit Zitat

Ein Blick auf den Code genügt doch, wofür musst du hier posten!?

Code:

template<class _E, class _Tr> inline
   basic_ostream<_E, _Tr>&
      __cdecl endl(basic_ostream<_E, _Tr>& _O)
   {_O.put(_O.widen('\n'));
   _O.flush();
   return (_O); }


Dem Stream wird ein Line Feed Zeichen angefügt und dann wird flush() aufgerufen. Ein Blick in die MSDN sagt mir: Alles was noch im Stream ist wird in den Ausgabepuffer geschrieben.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 15:38    Titel: Antworten mit Zitat

Ich versteh nur Bahnhof Rolling Eyes

Ich weiß auch nicht was flush sein soll.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 15:50    Titel: Antworten mit Zitat

Wichtig an dem Code und für deine Frage ist, dass endl ein '\n' ausgibt und dann ein flush() ausführt - damit wird ein Newline an den Stream gesendet und alle Zeichen, die sich noch im Puffer befinden ausgegeben.
D.h. dass dein Gesprächspartner keinen Blödsinn erzählt hat.

P.S.: Ohne Hazels Code hätte ich dir (fälschlicher Weise) erzählt, dass endl nicht anderes als

#define endl '\n'

ist - wäre schlecht gewesen...

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 16:21    Titel: Antworten mit Zitat

Anscheinend weißt du noch nicht was Streams sind... stell dir das wie eine Warteschlange von Bytes vor, die bei einem Ausgabepuffer(z.B. dem Textspeicher deiner Grafikkarte) endet. Du füllst den Stream z.B. mit cout << "bla"... das heißt aber nicht, dass sofort alle Zeichen im Speicher(und somit auf dem Bildschirm) landen. Ich hatte da damals in meinem ersten Logging System einen Bug: Das Programm ist abgestürzt bevor alle Zeichen in der Datei gelandet sind. Mit flush()-en kann man sowas vermeiden.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 16:26    Titel: Antworten mit Zitat

Ach ja, vielleicht sollte ich dir den Codeausschnitt nochmal besser erklären:

Zitat:

template<class _E, class _Tr> inline
basic_ostream<_E, _Tr>&
__cdecl endl(basic_ostream<_E, _Tr>& _O)
{


_O.put(_O.widen('\n')); // <-- Hier wird dem Stream ein \n angehängt
_O.flush(); // <-- hier wird gefluscht
return (_O);

}


Der Rest ist in diesem Falle für dich unwichtig und warscheinlich auch noch zu hoch... es sei denn, du weißt schon was Templates, Inlining ist und Stream-Klassen sind. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 18:10    Titel: Antworten mit Zitat

Danke,

ja ich wusste nicht was Streams waren Wink

Wäre endl dann eigentlich immer besser als \n , wenn man damit so manchen Fehler vermeiden kann?
Oder hat \n auch Vorteile, außer dass es in Strings verwendet werden kann und kürzer ist? Question
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.05.2003, 18:33    Titel: Antworten mit Zitat

\n ist kein Befehl sonder einfach nur ein Sonderzeichen und brauch somit nicht weiter verarbeitet werden. endl ist eine Funktion die auch noch weitere Funktionen aufruft -> braucht länger. Also wenn deine Funktion schnell sein muss würde ich auf endl verzichten.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum