Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

voyaist

Frischling

  • »voyaist« ist der Autor dieses Themas

Beiträge: 28

Wohnort: Heerlen

  • Private Nachricht senden

1

08.02.2012, 15:53

C++ frage zu endl!

Hallo

Mag jetzt dumm sein die Frage aber ich stelle sie trotzdem.

Bei denn endl am ende ist es doch so das eine Neue Zeile begonnen wird oder?

Beispiel:

C-/C++-Quelltext

1
cout<<"Hallo Welt<<endl;"<<


Also meine Frage ist dann \n das gleiche wie endl oder hat es denn selben effekt?

Ich bin eigentlich sehr weit mit denn Buch C++ fur Spieleprogrammierer!

Aber ich habe durch Zufall im Netz davon gelesen,und wollte jetzt mal fragen wie das ist ihr seit ja die Profis ihr musst es wissen:))


Mfg

Martin

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.02.2012, 15:55

Wenn du's genau wissen willst: std::endl ist ein Stream Manipulator der ein '\n' ausgibt und dann ein flush() ausführt.

3

08.02.2012, 16:17

Sollte aber so heißen:
Entweder:

C-/C++-Quelltext

1
std::cout << "Hello World!" << std::endl;


oder

C-/C++-Quelltext

1
std::cout << "Hello World!\n";


Bei Verwendung von

C-/C++-Quelltext

1
using namespace std;
kannst du die std:: natürlich jeweils weglassen. Für Anfänger ist es meiner Meinung nach besser es hinzuschreiben, um zu bemerken, welche Funktion/welcher Stream/wasauchimmer zu welchem Namespace gehört, aber das ist ein anderes Thema. Noch einmal zur 2. Methode: Wie dot bereits erwähnte, führt endl ein flush aus, das kannst du natürlich auch manuell machen. ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

08.02.2012, 16:23

Jap.

C-/C++-Quelltext

1
cout << endl;

ist also nicht gleich

C-/C++-Quelltext

1
cout << '\n';

sondern gleich

C-/C++-Quelltext

1
cout << '\n' << flush;

5

08.02.2012, 16:31

Ja. Du musst aber beachten, dass '\n' in die Anführungszeichen kommt und endl nicht ;)

voyaist

Frischling

  • »voyaist« ist der Autor dieses Themas

Beiträge: 28

Wohnort: Heerlen

  • Private Nachricht senden

6

08.02.2012, 22:58

Re:Endl

Hallo

Danke euch beiden fur die Erklärung!

Meine Frage ist das Flush() hat doch auch was mit einen Buffer zu tun oder? :hmm:

Da geht es um Loschen oder so habt ihr da ein Tipp wo man das nach lesen kann oder kommt das auch noch in C++ fur Spieleprogrammiere vor?

Ist das fur mich schon von Bedeutung da ich jetzt zu denn Klassen komme also in meine Buch was ich lese. :!:

Mir ist eben wichtig das ich die ganze Sprache verstehe!

Mfg

Martin :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

08.02.2012, 23:07

Ausgaben werden aus Performancegründen normalerweise oft erst in einen internen Buffer geschrieben (buffered I/O) und immer erst wenn der voll ist geht's wirklich in die Datei die darunter liegt, damit man gleich ganze Blöcke auf einmal schreiben kann. Das nennt man dann flushen (zu deutsch: runterspülen).
Explizit flushen tut man also eben immer dann, wenn man sicherstellen muss, dass die Ausgabe auch wirklich schon passiert ist.
Z.B. wenn du eine Aufforderung an den Benutzer etwas einzugeben in die Konsole schreibst, willst du natürlich sicher sein, dass der Benutzer diese Aufforderung auch zu sehen bekommt bevor du auf die Eingabe wartest. Auch wenn es unwahrscheinlich ist, könnte es natürlich (unter einem hypothetischen, äußerst eigenartigen Compiler bzw. Betriebssystem) passieren, dass deine Aufforderung nur in den internen Buffer geschrieben wurde und noch nicht auf dem Bildschirm zu sehen ist.
Ein anderes Beispiel wäre eine Logdatei. Wenn du ein Log schreibst, möchtest du sichergehen dass deine Logausgaben auch wirklich in der Datei landen bevor das Programm weiterläuft. Denn wenn das Programm abstürzt fehlen sonst evtl. für die Fehlersuche wichtige Informationen im Log, da die zum Crashzeitpunkt nur im Buffer waren und noch nicht auf der Festplatte.

Ich denk aber nicht dass das für dich im Moment irgendwie von belangen wäre ;)

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dot« (08.02.2012, 23:20)


voyaist

Frischling

  • »voyaist« ist der Autor dieses Themas

Beiträge: 28

Wohnort: Heerlen

  • Private Nachricht senden

8

12.02.2012, 02:10

Ausgaben werden aus Performancegründen normalerweise oft erst in einen internen Buffer geschrieben (buffered I/O) und immer erst wenn der voll ist geht's wirklich in die Datei die darunter liegt, damit man gleich ganze Blöcke auf einmal schreiben kann. Das nennt man dann flushen (zu deutsch: runterspülen).
Explizit flushen tut man also eben immer dann, wenn man sicherstellen muss, dass die Ausgabe auch wirklich schon passiert ist.
Z.B. wenn du eine Aufforderung an den Benutzer etwas einzugeben in die Konsole schreibst, willst du natürlich sicher sein, dass der Benutzer diese Aufforderung auch zu sehen bekommt bevor du auf die Eingabe wartest. Auch wenn es unwahrscheinlich ist, könnte es natürlich (unter einem hypothetischen, äußerst eigenartigen Compiler bzw. Betriebssystem) passieren, dass deine Aufforderung nur in den internen Buffer geschrieben wurde und noch nicht auf dem Bildschirm zu sehen ist.
Ein anderes Beispiel wäre eine Logdatei. Wenn du ein Log schreibst, möchtest du sichergehen dass deine Logausgaben auch wirklich in der Datei landen bevor das Programm weiterläuft. Denn wenn das Programm abstürzt fehlen sonst evtl. für die Fehlersuche wichtige Informationen im Log, da die zum Crashzeitpunkt nur im Buffer waren und noch nicht auf der Festplatte.

Ich denk aber nicht dass das für dich im Moment irgendwie von belangen wäre ;)
Hallo

Okay jetzt habe ich verstanden,danke fur deine Info!

Mfg

Martin

Werbeanzeige