Stream-Wo ist der Unterschied??
-
Hi, kann mir mal bitte einer sagen wo der Unterschied zwischen "cout", "cerr" und "clog" liegt, hab die ausprobiert, aber keinen gefunden

-
und noch eine frage

#include <iostream> #include <iomanip> using namespace std; int main() { cout << setfill('.'); cout << setiosflags(ios::left) << setw(30) << "Einfuehrung"; cout << setiosflags(ios::right) << setw(5) << 5 << endl; cout << setiosflags(ios::left) << setw(30) << "Referenz"; cout << setiosflags(ios::right) << setw(5) << 28 << endl; cout << setiosflags(ios::left) << setw(30) << "Uebungen"; cout << setiosflags(ios::right) << setw(5) << 88 << endl; fflush(stdin); cin.peek(); return 0; }Ab der 2ten Zeile wird alles rechtsbündig gemacht und die "left" befehle irgendwie nicht beachtet
wieso nur???
-
Auf dem ersten blick ist das auch nicht zu erkennen
prinzipiell cout ist der standard ausgabe kanal.
cerr und clog sind der fehler ausgabekanal.
der unterschied zwischen cerr und clog ist nur dass einer ( weiss nicht mehr welcher ) gepuffert ist der andere nicht.mach mal so ein programm
#include <iostream> using namespace std; int main() { cout << "standard out" << endl; cerr << "error out" << endl; clog << "log out" << endl; return 0; }jetzt rufe es von der kommandozeile einmal so ( sagen wir es heisst test )
testdann einmal so
test > cout.txtund dann so
test 2> cerr.txtauf.
dann sieh dir den inhalt von cout.txt und cerr.txt an.
Du bist gerade dabei die wirkliche power von kommandozeilenprogrammen zu entdecken.
Kurt
-
so funktionierts richtig
cout << left << setw(30) << "Einfuehrung"; cout << right << setw(5) << 5 << endl; cout << left << setw(30) << "Referenz"; cout << right << setw(5) << 28 << endl; cout << left << setw(30) << "Uebungen"; cout << right << setw(5) << 88 << endl;Warum deine Version nicht richtig funktioniert kann ich nicht sagen
Edit: eine Vermutung: Könnte mir vorstellen dass setiosflags(ios::left) nur ein bit setzt und wenn du danach setiosflags(ios::right) setzt hast du beide gesetzt.
-
oki danke
und wenn ich in ner zeile setfill('.') mache, wie kann ich das dann wieder abschalten??
-
und bei setprecision() sollte man die Nachkommastellen einstellen können, aber wenn ich das mache und z.B. auf 2 einstelle und 24.567 eingebe, dann wird nur 24 angezeigt :(( why?
-
Ania0687 schrieb:
und bei setprecision() sollte man die Nachkommastellen einstellen können, aber wenn ich das mache und z.B. auf 2 einstelle und 24.567 eingebe, dann wird nur 24 angezeigt :(( why?
cout << fixed << setprecision(2) << 24.567 << endl;Ania0687 schrieb:
und wenn ich in ner zeile setfill('.') mache, wie kann ich das dann wieder abschalten??
Denke das musst du wieder zurücksetzen,
setfill(' ');
-
thxxxxx!!!
-
ZuK schrieb:
Auf dem ersten blick ist das auch nicht zu erkennen
prinzipiell cout ist der standard ausgabe kanal.
cerr und clog sind der fehler ausgabekanal.
der unterschied zwischen cerr und clog ist nur dass einer ( weiss nicht mehr welcher ) gepuffert ist der andere nicht.mach mal so ein programm
#include <iostream> using namespace std; int main() { cout << "standard out" << endl; cerr << "error out" << endl; clog << "log out" << endl; return 0; }jetzt rufe es von der kommandozeile einmal so ( sagen wir es heisst test )
testdann einmal so
test > cout.txtund dann so
test 2> cerr.txtauf.
dann sieh dir den inhalt von cout.txt und cerr.txt an.
Du bist gerade dabei die wirkliche power von kommandozeilenprogrammen zu entdecken.
Kurthallo, kannst6 du das kurz erklären?
vorallem was bei den aufrufen passiert?
-
Also - cerr und clog (letzteres ist übrigens die gepufferte Version) werden immer direkt auf die Konsole geschickt, cout kann über Pipes an ein anderes Ziel umgeleitet werden (z.B. schreibt der Befehl "test > datei.txt" die regulären Ausgaben des Programms in die angegebene Datei und "test | test2" übergibt sie als Eingaben an ein anderes Programm).
-
CStoll schrieb:
Also - cerr und clog (letzteres ist übrigens die gepufferte Version) werden immer direkt auf die Konsole geschickt, cout kann über Pipes an ein anderes Ziel umgeleitet werden
cerr ( clog ) kannst du genausogut umleiten
test.exe > cout.txt 2> cerr.txtLeitet cout nach cout.txt und cerr nach cerr.txt um.
K